通过kubeadm搭建k8s集群
准备工作
系统 | 内核 | docker | ip | 主机名 | 配置 |
---|---|---|---|---|---|
centos 7.4 | 4.14.179-1.el7.x86_64 | 20.10.16 | 192.168.111.128 | master | 2核4G |
centos 7.4 | 4.14.179-1.el7.x86_64 | 20.10.16 | 192.168.111.129 | node01 | 2核4G |
centos 7.4 | 4.14.179-1.el7.x86_64 | 20.10.16 | 192.168.111.130 | node02 | 2核4G |
vmware
虚拟机环境,网络全部是NAT
模式,其中master
有另外一张网卡,桥接模式,IP:192.168.41.249
。
以下操作覆盖所有节点
关闭防火墙
1 | systemctl stop firewalld |
修改k8s配置文件
1 | cat <<EOF > /etc/sysctl.d/k8s.conf |
开启转发
1 | echo 1 > /proc/sys/net/ipv4/ip_forward |
关闭swap
1 | swapoff -a |
关闭selinux
1 | sed -i 's/enforcing/disabled/' /etc/selinux/config |
打开时间同步服务
1 | systemctl enable chronyd |
如果可以同步
安装docker
所有节点都需要安装
1 | yum install -y yum-utils |
修改docker配置文件
1 | cat <<EOF | sudo tee /etc/docker/daemon.json |
安装kubeadm kubelet kubectl服务
所有节点都需要配置和安装
配置yum源
1 | cat /etc/yum.repos.d/kubernetes.repo |
安装(使用1.23.7版,不用最新版,最新版可能有坑,例如镜像仓库无法替换,镜像下载不下来)
1 | yum install kubeadm-1.23.7-0 kubelet-1.23.7-0 kubectl-1.23.7-0 -y |
部署k8s
主节点上初始化master
1 | kubeadm init --kubernetes-version=1.23.7 \ |
kubernetes-version
:指定k8s
版本,与安装版本一致
image-repository
:指定镜像仓
apiserver-advertise-address
:apiserver
监听地址(IP要在本机)
service-cidr
:svc
的地址段
pod-network-cidr
:pod
的地址段
正常情况下,部署成功。不正常情况,在踩坑中有汇总。
1 | I0706 16:46:45.150346 12488 loader.go:372] Config loaded from file: /etc/kubernetes/admin.conf |
其中,最下面的一串命令会在后续其他节点加入集群时会用到。如果没有保存下来也没关系,可以通过命令重新生成。
1 | # kubeadm token create --print-join-command |
配置kubectl
工具
1 | cp -a /etc/kubernetes/admin.conf .kube/config |
安装flannel
1 | mkdir k8s |
修改yml
,将网络改成初始化时pod
网络
1 | net-conf.json: | |
安装flannel
1 | kubectl apply -f kube-flannel.yml |
- 可能出现镜像拉不下来导致
pod
启动不起来,可手动docker pull
拉一下镜像。
安装完flannel
之后,node
状态恢复成Ready
1 | # kubectl get nodes |
命令补全
1 | yum install -y bash-completion |
将其他节点加入到集群中
执行上面的kubeadm join
1 | kubeadm join 192.168.111.128:6443 --token i95sh4.acf1p80elxaku7y0 --discovery-token-ca-cert-hash sha256:c75ee26ea8d28e9703affae319d0479a5a3ece6c82448cbae527821c96271a66 |
集群状态
1 | # kubectl get nodes |
每个节点的kubelet
都设置自启动
1 | systemctl enable kubelet |
检查功能
1 | kubectl create deployment my-dep --image=nginx --port=80 --replicas=10 |
1 | curl 10.244.1.3:80 |
关机,快照。
踩坑
kubeadm init
时,kubelet
启动不起1
journalctl -u kubelet
很有可能是由于
swap
没有关闭kubeadm init
时,容器启动不起来1
2docker ps -a
docker logs xxx(apiserver)可能由于换了镜像仓,但是镜像也不能拉下来导致。
也可能由于IP地址没有绑定,导致
etcd
起不来。报错x09
1
E0706 07:40:27.771562 1 authentication.go:63] "Unable to authenticate the request" err="[x509: certificate signed by unknown authority, verifying certificate SN=388146623273092387, SKID=, AKID=76:0F:D3:22:AE:F3:23:23:9D:81:DD:C5:90:82:E8:1E:89:D7:63:98 failed: x509: certificate signed by unknown authority (possibly because of \"crypto/rsa: verification error\" while trying to verify candidate authority certificate \"kubernetes\")]"