部署K8s集群
部署K8s集群的主要步骤包括配置管理节点和计算节点以及在管理节点添加Flannel网络插件。
配置管理节点
如果需要重新搭建K8s集群,需要先清除旧的K8s集群设置,具体操作步骤请参见卸载K8s。
- 可选:排查是否有配置代理。如果已配置代理,请删除代理,以避免kubeadm init初始化超时失败。
- 查看是否配置了代理。
env|grep -E "http_proxy|https_proxy|no_proxy"
如果返回结果则配置了代理。
- 删除代理。
export -n http_proxy export -n https_proxy export -n no_proxy
- 查看是否配置了代理。
- 如果使用的是CentOS系统,请忽略此步骤;如果使用的是openEuler系统,则需要手动创建resolv.conf文件。在集群初始化需要检验是否存在resolv.conf文件,如果文件不存在,会产生报错。创建resolv.conf文件的命令为:
touch /etc/resolv.conf
- 在管理节点上执行集群初始化命令。
kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version v1.23.1
- v1.23.1表示Kubernetes的版本号,请根据实际情况修改。
- 计算节点不需要执行集群初始化操作。
- 如果在管理节点初始化的时候提示如下信息。
/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
可以通过执行如下命令将/proc/sys/net/bridge/bridge-nf-call-iptables的值配置为1(vim命令不支持修改此文件)。
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
- --pod-network-cidr选项用于指定kubernetes网络可以使用的IP地址段,由于后续使用Flannel网络插件,该插件固定使用的IP地址段为:10.244.0.0/16。
- --control-plane-endpoint选项用于为控制平面指定一个稳定的IP地址或DNS名称。kubeadm 1.15及以后版本支持该选项,若需要配置该选项,可直接在初始化命令后添加该参数。
如果打印此信息如图1所示,则管理节点成功被初始化。
在图1中,黄框信息表示管理节点配置集群需要执行的命令,红框信息表示计算节点加入集群的token命令,请保存该段命令。
- 配置集群。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=/etc/kubernetes/admin.conf
- 在管理节点查看集群节点信息。
kubectl get nodes
- 保存管理节点生成的加入集群信息。
该信息在成功初始化管理节点后生成并打印,集群信息如下所示。
kubeadm join 192.168.1.11:6443 --token a9020j.vnfgqk7n30p5d9z0 --discovery-token-ca-cert-hash sha256: c465651177b41c545fe20f8dc052b9661a8375afdeac7e7ecf52029fc66a506a
该token命令可以用于24小时内计算节点加入集群。
- 集群加入token是随机生成的,在搭建集群时需要使用实际生成的指令。
- token默认有效期为24小时,若token超时,可在K8s管理节点通过如下命令进行重新生成。
kubeadm token create --print-join-command
配置计算节点
- 可选:如果Kubernetes工作节点已经配置了http和https代理,需要删除代理。
export -n http_proxy export -n https_proxy export -n no_proxy
- 计算节点加入集群。
- 在计算节点中执行以下命令以加入集群。
kubeadm join 192.168.1.11:6443 --token a9020j.vnfgqk7n30p5d9z0 --discovery-token-ca-cert-hash sha256: c465651177b41c545fe20f8dc052b9661a8375afdeac7e7ecf52029fc66a506a
该token命令可以用于24小时内计算节点加入集群。
- 集群加入token是随机生成的,在搭建集群时需要使用实际生成的指令。
- token默认有效期为24小时,若token超时,可在K8s管理节点通过如下命令进行重新生成。
kubeadm token create --print-join-command
- 约等待1min后,在管理节点查看集群中加入的计算节点。
kubectl get nodes
预期结果示例:
NAME STATUS ROLES AGE VERSION master NotReady master 12h v1.23.1 compute01 NotReady <none> 11h v1.23.1 compute02 NotReady <none> 11h v1.23.1
- 在计算节点中执行以下命令以加入集群。
- 在管理节点和计算节点上查看kubelet服务状态。
systemctl status kubelet
预期结果示例:
添加Flannel网络插件
在管理节点添加Flannel网络插件,以解决各主机节点上Pod之间的网络通信问题。
- 下载Flannel网络插件配置文件。
wget --no-check-certificate https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 修改kube-flannel.yml文件以配置资源。
- 打开文件。
vim kube-flannel.yml
- 按“i”进入编辑模式,在resources下修改Flannel网络插件使用的资源,请参考下图并根据实际情况配置。
resources: requests: cpu: "100m" memory: "50Mi" limits: cpu: "200m" memory: "100Mi"
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开文件。
- 安装Flannel插件。
kubectl apply -f kube-flannel.yml
- 在管理节点查看节点状态。
kubectl get nodes
可以看到节点的状态变成了Ready。预期结果示例:
NAME STATUS ROLES AGE VERSION master Ready master 12h v1.23.1 compute01 Ready <none> 11h v1.23.1 compute02 Ready <none> 11h v1.23.1
- 在管理节点查看各Pod状态。
kubectl get pod -A
命令返回中,READY显示为1/1时,表示Pod正常运行。
图2 pod status