麒麟v10部署k8s+containerd
环境
| 系统 | 主机名 | IP | 角色 | kubernetes版本 |
|---|---|---|---|---|
| Kylin Linux Advanced Server V10 | master | 192.168.200.125 | master | 1.28.2 |
| Kylin Linux Advanced Server V10 | node-01 | 192.168.200.154 | node | 1.28.2 |
环境初始化(所有节点)
安装依赖
1dnf install -y dnf-utils ipvsadm telnet wget net-tools conntrack ipset jq iptables curl sysstat libseccomp socat nfs-utils fuse修改主机名
修改本地解析
关闭防火墙和 selinux
关闭 swap
加载内核模块
1modprobe br_netfilter配置转发
部署容器运行时(所有节点)(任选其一)
安装 containerd
安装
1 2 3 4 5 6 7 8 9# 二进制安装 wget https://github.com/containerd/containerd/releases/download/v1.7.14/containerd-1.7.14-linux-amd64.tar.gz tar xf containerd-1.7.14-linux-amd64.tar.gz cp bin/* /usr/local/bin # yum 安装 yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install containerd -y配置
创建目录
1mkdir -p /etc/containerd生成默认配置文件
1containerd config default > /etc/containerd/config.toml修改配置
修改加速地址
创建启动脚本
vim /usr/lib/systemd/system/containerd.service1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28[Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target local-fs.target [Service] #uncomment to enable the experimental sbservice (sandboxed) version of containerd/cri integration #Environment="ENABLE_CRI_SANDBOXES=sandboxed" ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/local/bin/containerd Type=notify Delegate=yes KillMode=process Restart=always RestartSec=5 # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNPROC=infinity LimitCORE=infinity LimitNOFILE=infinity # Comment TasksMax if your systemd version does not supports it. # Only systemd 226 and above support this version. TasksMax=infinity OOMScoreAdjust=-999 [Install] WantedBy=multi-user.target启动服务
安装 runc
安装 CNI 插件
安装 docker
配置源
安装
部署 k8s(所有节点)
添加安装源
国外仓库
1 2 3 4 5 6 7 8 9cat >> /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch enabled=1 gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF国内仓库
1 2 3 4 5 6 7 8 9cat >> /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF查看版本
1yum list kubeadm --showduplicates | sort -r安装
默认安装最新版本,可以安装指定版本,如:kubeadm-1.28.2
1yum install kubeadm kubectl kubelet修改 kubelet 配置
修改 kubelet 启动脚本
vim /usr/lib/systemd/system/kubelet.service1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16[Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/ Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/bin/kubelet \ --container-runtime=remote \ # 添加 --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock # 添加 Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target设置开机自启
1systemctl enable kubelet
初始化 k8s(master节点执行)
生成默认文件
1kubeadm config print init-defaults > kubeadm-config.yaml修改配置文件
vim kubeadm-config.yml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37apiVersion: 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.200.125 # 修改成 master 节点的 IP 地址 bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock imagePullPolicy: IfNotPresent name: master # 修改成 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.aliyuncs.com/google_containers # 修改成阿里云源 kind: ClusterConfiguration kubernetesVersion: 1.28.2 # kubernetes 版本号 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16 # pod 网络地址 scheduler: {}拉取镜像(所有节点执行)
1kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.2查看镜像(node节点也要执行)
当执行
crictl images时,出现如下错误,说明 crictl 工具默认连接的是 dockershim 的 socket,但系统中并没有这个 socket
解决办法:
vim /etc/crictl.yaml再次执行
crictl images时,就不在出现这个报错了初始化 master 节点
1kubeadm init --config=kubeadm-config.yaml安装完成后执行命令
安装 flannel 网络插件(所有节点执行)
1kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml可以查看该文件,提前下载好镜像
ctr images pull ghcr.io/flannel-io/flannel:v0.27.0和ctr images pull ghcr.io/flannel-io/flannel-cni-plugin:v1.7.1-flannel1,执行ctr --namespace default images import flannel.tar和ctr --namespace default images import flannel-cni-plugin.tar命令开始导入镜像执行
ctr --namespace k8s.io images ls查看镜像
添加 node 节点
https://www.yangxingzhen.com/9805.html
如果忘记 token,可以执行kubeadm token create --print-join-command 重新获取,复制输出的内容在 node 节点上执行
在 master 节点查看集群状态:kubectl get nodes
在 master 节点查看 pod 状态:kubectl get pods -A
删除 node 节点
| |
然后清空 node 节点中的集群信息
| |
ctr 和 crictl 介绍
ctr 是 containerd 自带工具,是 containerd 的 CLI 工具,相当于 containerd 的控制台,可以使用它来管理 containerd 中的镜像、容器、任务等
crictl 是 kubernetes 通用调试工具,用于连接 CRI 接口。
