centos7.9部署containerd集群

说明:docker容器管理比较常见,现在除了docker,还有containerd跟docker类似,用于容器管理

1:前提条件:

建议最小硬件配置:2核CPU、2G内存、50G硬盘

服务器最好可以访问外网,会有从网上拉取镜像需求

2:版本

操作系统:centos7.9

containerd:  1.6.22

3:服务器规划:(本实验采用虚拟机)

    master:192.168.73.190

4:配置环境初始化

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap

swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 根据规划设置主机名

hostnamectl set-hostname <hostname>

hostnamectl set-hostname master

# 在master添加hosts

cat >> /etc/hosts << EOF
192.168.73.190 master
EOF

配置iptables的ACCEPT规则

iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT

# 将桥接的IPv4流量传递到iptables的链

swappiness 参数调整,swap关闭,也必须添加此参数

cat >> /etc/sysctl.d/k8s.conf << EOF

vm.swappiness = 0

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

EOF

执行如下命令使修改生效

modprobe br_netfilter

sysctl -p /etc/sysctl.d/k8s.conf


安装 ipvs 

cat >> /etc/sysconfig/modules/ipvs.modules << EOF

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack_ipv4

EOF

#chmod 755 /etc/sysconfig/modules/ipvs.modules

#/etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上面脚本创建了/etc/sysconfig/modules/ipvs.modules文件后,可执行lsmod | grep -e ip_vs -e nf_conntrack_ipv4 查询是否加载所需的内核模块

安装 ipset 软件包

yum install ipset -y

查看 ipvs 的代理规则,则安装管理工具 ipvsadm

yum install ipvsadm -y

同步服务器时间

yum install chrony -y

systemctl enable chronyd

systemctl start chronyd

chronyc sources

5.安装 containerd

下载补丁源

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 安装containerd

# 查看可安装版本

[root@master ~]# yum list | grep containerd

containerd.io.x86_64                      1.6.10-3.1.el7               @docker-ce-stable

# 执行安装

[root@master ~]# yum -y install containerd.io

# 查看

[root@master ~]# rpm -qa | grep containerd

containerd.io-1.6.10-3.1.el7.x86_64

创建containerd配置文件

# 创建目录

mkdir -p /etc/containerd

containerd config default > /etc/containerd/config.toml

# 替换配置文件

sed -i 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml

sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"#' /etc/containerd/config.toml

启动containerd

systemctl enable containerd

systemctl start containerd

systemctl status containerd

验证containerd安装是否成功

6.安装三大件( kubelet、kubeadm、kubectl)

下载 kubernetes 源码库

cat >> /etc/yum.repos.d/kubernetes.repo <<EOF

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

EOF

 安装 kubeadm、kubelet、kubectl(指定自己想要的版本,如版本1.25.0)

yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0

设置运行时

crictl config runtime-endpoint /run/containerd/containerd.sock

将 kubelet 设置成开机启动

systemctl daemon-reload

systemctl enable kubelet && systemctl start kubelet

7.初始化集群

---master执行----

导出默认的初始化配置

kubeadm config print init-defaults > kubeadm.yaml

修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,需要 注意的是由于我们使用的containerd作为运行时,所以在初始化节点的时候需要指定 cgroupDriver 为systemd

  1. advertiseAddress: 192.168.73.190  # 修改为master节点IP
  2. name: master  # 修改为master节点的主机名
  3. imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers  # 阿里云镜像地址
  4. kubernetesVersion: 1.25.0   # 版本根据执行:kubelet --version 查看
  5. podSubnet: 172.16.0.0/16   # networking: 下添加pod网段
  6. cgroupDriver: systemd     # 指定 cgroupDriver 为 systemd 

[root@master ~]# cat kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.73.190
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: master
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.25.0
networking:
  dnsDomain: cluster.local
  podSubnet: 172.16.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

执行以上配置文件进行初始化

kubeadm init --config=kubeadm.yaml

执行结果最后为如下:

 拷贝k8s认证文件

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 node -o wide查看是否安装成功

 可以看到“CONTAINER-RUNTIME”下面显示containerd

但问题是状态为 notReady, 这个要安装网络插件

下载calico文件

curl https://projectcalico.docs.tigera.io/archive/v3.23/manifests/calico.yaml -O

然后编辑calico.yaml文件

(初始化master的时候podSubnet: 172.16.0.0/16,但calico.yaml文件默认IP为:192.168.0.0/16,所以需要改为172.16网段)

# 找到CALICO_IPV4POOL_CIDR,取消注释并这里需要修改172.16

- name: CALICO_IPV4POOL_CIDR   

  value: "172.16.0.0/16"

执行完后发现controller一直为pending状态

 执行 查看原因

kubectl describe pod calico-kube-controllers-d8b9b6478-wbv9c -n kube-system

 发现这时候取消添加容忍或 取消污点

这里取消污点,执行:

(注意,污点名称可以在上面describe node里找到,且命令最后有一个“-”)

kubectl taint nodes master node-role.kubernetes.io/control-plane-

再次执行:

# kubectl get pod -A  -o wide

# kubectl get nodes -o wide

已经全部正常了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值