跳至主要內容

centos7.9系统下k8s+containerd集群部署

zhengcog...大约 5 分钟k8sdocker容器

节点规划

节点

主机名ip地址角色
k8s-master192.168.1.251master
k8s-node192.168.1.253node1

组件

角色组件
mastercontainerd、kubelet、kubeadm、kubectl、flannel
node1containerd、kubelet、kubeadm、kubectl

1. 节点配置

1) 登录192.168.1.251设置master主机名

hostnamectl set-hostname k8s-master

2) 登录192.168.1.253设置node主机名

hostnamectl set-hostname k8s-node-1

3) 修改hosts(两台都要修改)

vi /etc/hosts

192.168.1.251 k8s-master
192.168.1.253 k8s-node-1

4) 关闭防火墙

sudo systemctl stop firewalld && sudo systemctl disable firewalld

5) 如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区(两台都需要)

sudo swapoff -a

6) 关闭 SELinux,否则后续 K8S 挂载目录时可能报错 Permission denied (两台都需要)

sudo setenforce 0

# 修改配置文件,使其永久生效
vi /etc/selinux/config

SELINUX=disabled

7) 时间同步(两台都需要)

yum install ntpdate -y && ntpdate time.windows.com

8) 配置内核参数

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

9) 配置br_netfilter,不配置初始化易出错

modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward

2.安装containerd(两台都需要)

containerd官方建议系统内核4.x以上,centos7默认内核版本3.1,建议升级内核

1) 升级linux内核

# 查看内核
uname -a

# 升级
# 导入ELRepo仓库的公共密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装ELRepo仓库的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 查询可用内核版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 其中lt表示long-term,即主线版本,该版本建议慎重选择。
# 其中ml表示latest mainline,即长期稳定版本,稳定可靠,建议安装该版本
yum -y --enablerepo=elrepo-kernel install kernel-ml
# 安装完成后需要设置 grub2,即内核默认启动项
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-set-default 0
# 生成 grub 配置文件并重启
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

#验证是否成功安装
uname -a

Linux k8s-node-1 6.1.0-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Dec 11 18:09:31 EST 2022 x86_64 x86_64 x86_64 GNU/Linux

2) 安装containerd

# 安装containerd环境依赖并设置yum源并查看Containerd版本
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list | grep containerd
# 开始安装containerd,安装指定版本
yum -y install containerd.io-1.6.6-3.1.el1
# 创建containerd的配置文件并修改相应配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

# 修改镜像源为国内
vi /etc/containerd/config.toml

...省略配置
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://dockerhub.mirrors.nwafu.edu.cn"]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
    endpoint = ["https://registry.aliyuncs.com/k8sxio"]
...省略配置

# registry.mirrors."xxx" : 表示需要配置 mirror 的镜像仓库。例如,registry.mirrors."docker.io" 表示配置 docker.io 的 mirror。
# endpoint : 表示提供 mirror 的镜像加速服务。例如,这里推荐使用西北农林科技大学提供的镜像加速服务作为 docker.io 的 mirror

# 替换sandbox_image为国内源
sed -i "s#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g" /etc/containerd/config.toml

3) 启动containerd

systemctl daemon-reload && systemctl enable containerd && systemctl restart containerd

# 查询containerd版本
ctr version
# 查询容器列表
ctr containers ls
# 查询镜像列表
ctr images ls

3.安装k8s(通过kubeadm安装)

1)指定yum 源的方式进行安装,使用阿里云的源(两台都需要执行)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
 http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 列出所有可安装的版本
yum --showduplicates list kubeadm

# 安装指定版本
yum -y install kubeadm-1.25.5 kubectl-1.25.5 kubelet-1.25.5

# 安装完成后,配置容器运行时为containerd
crictl config runtime-endpoint /run/containerd/containerd.sock

# 设置kubelet开机启动
systemctl daemon-reload && systemctl enable kubelet && systemctl start kubelet

# 查询状态会保存,后续安装kubeadm初始化、安装完flannel等插件后就没问题了
systemctl status kubelet

2) 初始化master(在k8s-master节点执行)

# 生成master初始化文件
mkdir -p ~/k8s/
cd ~/k8s
kubeadm config print init-defaults > kubeadm.yaml

# 修改配置文件,将ip地址改为192.168.1.251
vi kubeadm.yaml

...省略代码
localAPIEndpoint:
  advertiseAddress: 192.168.1.251 # 主节点ip
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s-master # 主节点名称
...省略代码

# 保存退出编辑
# 执行初始化
kubeadm init --config=kubeadm.yaml

...省略过程
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.251:6443 --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:d981a5eb53699bd4500777db72b6224789fa21080c44798863d88c7ac7e9a52e

# 如果初始化出错,根据错误信息自行排查(错误类型太多了)
# 初始化配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 查看节点列表
kubectl get nodes

NAME         STATUS   ROLES           AGE    VERSION
k8s-master   Ready    control-plane   114m   v1.25.5

# 安装网络插件flannel(集群子网)
cd ~/k8s
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

cat > /run/flannel/subnet.env <<EOF
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF

# 开始安装
kubectl apply -f kube-flannel.yml

# 验证是否安装成功
kubectl get pod -n kube-system

NAME                                 READY   STATUS    RESTARTS   AGE
coredns-7f8cbcb969-2kpsm             1/1     Running   0          121m
coredns-7f8cbcb969-8dhzr             1/1     Running   0          121m

出现以上结果表示安装成功

3) 将节点加入集群(在k8s-node-1上执行)

kubeadm join 192.168.1.251:6443 --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:d981a5eb53699bd4500777db72b6224789fa21080c44798863d88c7ac7e9a52e

4) 在k8s-master上查看集群节点状态

kubectl get nodes

NAME         STATUS   ROLES           AGE    VERSION
k8s-master   Ready    control-plane   129m   v1.25.5
k8s-node-1   Ready    <none>          116m   v1.25.5

出现以上结果,节点增加成功
如果出现NoReady的状态,由于没有设置集群网络,安装配置完网络会变为Ready状态。
上次编辑于:
贡献者: Hyman
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5