containerd + k8s集群
containerd 是一个轻量级的容器运行时,专注于运行容器。相比较于其他容器运行时,如 Docker,containerd 更加精简,去除了一些不必要的功能和组件,从而提供了更高的性能和更低的资源消耗。这使得在大规模 Kubernetes 集群中使用 containerd 可以提升整体的性能和效率。并且Kubernetes 社区积极支持 containerd,并提供了与 containerd
前言:
containerd 是一个轻量级的容器运行时,专注于运行容器。相比较于其他容器运行时,如 Docker,containerd 更加精简,去除了一些不必要的功能和组件,从而提供了更高的性能和更低的资源消耗。这使得在大规模 Kubernetes 集群中使用 containerd 可以提升整体的性能和效率。并且Kubernetes 社区积极支持 containerd,并提供了与 containerd 的深度集成
一、基础环境
三台虚拟机(centos7.6):
master | 192.168.0.100 |
node01 | 192.168.0.101 |
node02 | 192.168.0.102 |
三台服务器关闭防火墙,iptables清空,禁用selinux,时钟同步,全部禁用swap ,配置桥 接功能,配置hosts解析。
1.1:关闭防火墙
systemctl stop firewalld.service && systemctl disable firewalld.service
1.2:清空iptables
iptables -F && iptables-save
1.3:禁用selinux /etc/selinux/config 如图:
1.4:时钟同步
因为虚拟机都在本地安装后时间一致。在生产环境中时钟要同步,因为在部 署服务后程序会在服务器获取时间,如果时间不一致在多节点的集群中程序获取时间判 断时会出错。
1.5:禁用swap /etc/fstab
执行 sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab命令或者vim /etc/fstab注释掉如图条目。
1.6:配置桥接功能
开启桥接功能:modprobe br_netfilter
在/etc/sysctl.conf添加 net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1 配置
使用sysctl -p 生效
1.7: 配置hosts解析三台服务器均添加
二、部署container(三台服务器均安装)
使用阿里docker源安装。安装docker源后执行:
yum list containerd.io --showduplicates | sort -r
可以看到多个container版本安装默认版本即可
yum install containerd
安装完成后会自带ctr命令
启动containerd
systemctl enable containerd.service && systemctl start containerd.service
生成配置文件:containerd config default > /etc/containerd/config.tooml
(containerd启动后会自动创建配置文件目录目录中有config.tooml文件需要先删除或者修改 名称)
修改配置文件 SystemdCgroup = true 重启containerd 服务
修改配置文件sandbox_image = "k8s.gcr.io/pause:3.6" 改为sandbox_image="registry.aliyuncs.com/google_containers/pause:3.9"
三、安装cli工具
官方文档 https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md
在Releases · kubernetes-sigs/cri-tools · GitHub选择你要下载的版本。
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.28.0/crictl-v1.28.0-linux-amd64.tar.gz
tar zxf crictl-v1.28.0-linux-amd64.tar.gz -C /usr/ocal
mkdir /usr/local/cri && mv crictl /usr/local/cri
ln -s /usr/local/cri/* /usr/bin/
执行crictl config 生存配置文件, 文件路径 : /etc/crictl.yaml 修改配置文件如
下图:
测试命令crictl images 看有无报错。
三、部署k8s
使用阿里k8s源,在master节点安装kubelet kubeadm kubectl ,node节点可以不安装kubectl。
3.1:生成k8s配置文件
kubeadm config print init-defaults > /home/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.0.100 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.k8s.io imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: 1.28.7 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16 scheduler: {} --- kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 cgroupDriver: systemd
修改localAPIEndpoint:advertiseAddress:地址为master地址192.168.0.100
修改nodeRegistration:name:节点名称master
修改imageRepository:参数为阿里源 registry.aliyuncs.com/google_containers
在networking添加容器子网:podSubnet: 10.244.0.0/16
添加容器驱动:
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
3.2:初始化K8s。
运行 kubeadm init --config /home/kubeadm.yaml
运行初始化后根据提示配置master,添加node节点。
使用kubectl get pods -A 查看组件运行状态
kubectl get nodes 查看节点状态
k8s初始化成功后三台服务器执行systemctl enable kubelet.service
四、安装fannel插件
插件地址:GitHub - flannel-io/flannel: flannel is a network fabric for containers, designed for Kubernetes
下载插件:
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
打开kube-flannel.yml 查找image找到需要的镜像docker.io/flannel/flannel:v0.24.3和docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1
由于部分镜像不能下载先进行测试,使用crictl pull 命令下载镜像,经过测试docker.io/flannel/flannel:v0.24.3和docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1可以正常拉取
执行kubectl apply -f kube-fannle.yml 初始化k8s网络。
执行kubectl get nodes 查看集群状态
五、补充部分ctr和crictl命令
在ctr查询镜像和容器时候需要指定命名空间
例如查询镜像:ctr -n k8s.io image list
ctr -n k8s.io i tag | 镜像标记tag(i代指image) |
ctr -n k8s.io i tag --force | 强制替换 |
ctr -n k8s.io i rm | 删除镜像 |
ctr -n k8s.io i pull | 拉取镜像 |
ctr -n k8s.io i push -k | 推送镜像 (-k跳过ssl验证) |
ctr -n k8s.io i export xxx.tar xxx | 导出镜像 |
ctr -n k8s.io i import xxx.tar | 导入镜像 |
crictl images | 查看镜像 |
crictl ps -a | 查看所有容器 |
crictl pull | 拉取镜像 |
crictl push | 推送镜像 |
crictl exec -it xxxx ls | 容器xxxx上执行ls命令 |
crictl logs xxx | 获取容器的日志 |
crictl logs --tail= "N" | 获取最近的 N 行日志 |
更多推荐
所有评论(0)