K8S, Linux

CentOS7向K8S Master添加Node

Posted by 煮石山农2023 - Oct - 29 Leave comments

1. 设置系统主机名及hosts文件

记得将所有主机的主机名与IP的解析都写入/etc/hosts文件。

2. 更新系统&设置存储库

yum update -y
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3. 相关设置

3.1. 禁用iptablesfirewalld服务

systemctl stop firewalld

systemctl disable firewalld

systemctl stop iptables

systemctl disable iptables

3.2. 禁用SELinux

sed -i 's/enforcing/disabled/' /etc/selinux/config

3.3. 禁用swap分区

永久关闭swap分区,编辑/etc/fstab文件,将swap行的内容注释掉。

# /dev/mapper/xxx    swap   xxx

3.4. 调整内核参数

/etc/sysctl.d/k8s.conf文件中追加如下三行内容:

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

依次执行如下命令:

sysctl -p
modprobe br_netfilter
lsmod | grep br_netfilter

4. 安装docker和cri-dockerd(所有节点执行)

4.1. 安装docker

  1. 移除旧版docker。
yum remove docker \
       docker-client \
       docker-client-latest \
       docker-common \
       docker-latest \
       docker-latest-logrotate \
       docker-logrotate \
       docker-engine
  1. 安装docker及其依赖库。
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动Docker,设置开机自启动。
# 启动docker
systemctl start docker

# 设置docker开机启动
systemctl enable docker

# 验证
systemctl status docker

4.2. 安装cri-dockerd

K8S 1.24版本后需要使用cri-dockerd和docker通信。

  1. 下载cri-dockerd。
# 若没有wget,则执行
yum install -y wget

# 下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4-3.el7.x86_64.rpm

# 安装
rpm -ivh cri-dockerd-0.3.4-3.el7.x86_64.rpm

# 重载系统守护进程
systemctl daemon-reload
  1. 设置镜像加速。

Docker Hub 是 Docker 官方提供的一个公开的 Registry,里面存储了很多常用的镜像,当我们使用 Docker 运行容器时,如果本地没有这个镜像,它就会到 Docker Hub 去下载。但是,由于 Docker Hub 服务器在国外,所以在国内下载速度比较慢。而 Registry Mirror 也被称为 Docker 镜像加速器,它实际上就是一个代理服务器,能够提供更快的镜像下载速度。

为了从国内的镜像托管站点获得镜像加速支持,建议修改Docker的配置文件,增加Registry Mirror参数,将镜像配置写入配置参数中。

编辑/etc/docker/daemon.json,设置:

{
  "registry-mirrors": ["https://c12xt3od.mirror.aliyuncs.com"]
}
  1. 修改配置文件/usr/lib/systemd/system/cri-docker.service,修改第10行ExecStart=为:
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

其中pause:3.9版本是根据K8S的版本相关,当前安装v1.28.2版本的K8S时,通过如下命令得知pause的版本为3.9:

kubeadm config images list --kubernetes-version v1.28.2
  1. 自启动、重启Docker组件。
# 重载系统守护进程
systemctl daemon-reload

# 设置cri-dockerd自启动
systemctl enable cri-docker.socket cri-docker

# 启动cri-dockerd
systemctl start cri-docker.socket cri-docker

# 检查Docker组件状态
systemctl status docker cir-docker.socket cri-docker

5. 安装Kubernetes

5.1. 配置repo源

/etc/yum.repos.d/目录下创建kubernetes.repo文件,内容如下:

[kubernetes]
name=Kubernetes Repository
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

5.2. 安装kubectl&kubelet&kubeadm

执行如下命令安装:

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

5.3. 检查runc

执行:

runc -v

6. Node节点加入集群

6.1. 环境配置

  1. 将Master节点的/etc/kubernetes/admin.conf文件拷贝到Node节点的/etc/kubernetes/目录下。

  1. 将admin.conf加入环境变量,直接使用永久生效。
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >>  ~/.bash_profile
source ~/.bash_profile

6.2. 加入集群

  1. 在Master节点执行kubeadm init成功后,会出现kubeadm join xxx xxx的命令,直接复制到Node节点执行就好。
  2. 若没有复制到kubeadm join的命令或者是想要在集群中加入新节点,则先在Master执行如下命令,获取token 和 discovery-token-ca-cert-hash。
    1. 获取 token 参数
kubeadm token list   # 查看已有 token
kubeadm token create # 没有token则执行,创建新的 TOKEN

  1. 获取 discovery-token-ca-cert-hash 参数
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null |  openssl dgst -sha256 -hex | sed 's/^.* //'

  1. 修改获取的 token 和 discovery-token-ca-cert-hash 后,再在Node节点执行:
kubeadm join 192.168.3.61:6443 --token dz3s8l.8co7h567py8kbr1n --discovery-token-ca-cert-hash sha256:a7f52953d123a1c7fc6ccdb0ee6c0f0b0c52dbb06ea8592d3f85231c7d0e755a --cri-socket unix:///var/run/cri-dockerd.sock

至此,则加入集群成功:

7. 重新加入集群

如果需要重新执行加入集群,则执行:

kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock

再获取TOKEN、discovery-token-ca-cert-hash 参数后,最后执行:

kubeadm join 192.168.3.61:6443 --token dz3s8l.8co7h567py8kbr1n --discovery-token-ca-cert-hash sha256:a7f52953d123a1c7fc6ccdb0ee6c0f0b0c52dbb06ea8592d3f85231c7d0e755a --cri-socket unix:///var/run/cri-dockerd.sock

   声明:本文采用 BY-NC-SA 协议进行授权 | 星期九
   原创文章转载请注明:转自《CentOS7向K8S Master添加Node

No comments yet.
comment_ad
  

 NOTICE1: You should type some Chinese word in your comment to pass the spam-check, thanks for your patience!