如何搭建k8s服务(containerd部署)
Kubernetes 是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s) 是 Google 开源的容器集群管理系统(谷歌内部:Borg)。在 Docker 技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Kubernetes 是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。
目录
一、docker、containerd的区别
二、规划资源(2+节点)
三、部署及配置
1、修改主机名
2、关闭swap分区和selinux(master、node均执行)
1)临时生效
2)永久生效
3、安装软件(master、node均执行)
4、配置containerd服务(master、node均执行)
5、启动服务并设置开机自启(master、node均执行)
6、配置所需模块(master、node均执行)
7、配置内核参数(master、node均执行)
8、初始化k8s集群(master执行)
9、node加入集群(node执行)
10、创建kubectl(一般master执行,也可配置node)
1)临时生效
2)永久生效
11、创建calico网络(master执行)
1)下载配置文件
2)应用calico网络
3)查看状态
四、验证
1、下载demo
2、部署
3、查看pod
4、容器访问及执行命令
注:后续将分步讲解k8s部署ingress-nginx、MetalLB等。
一、docker、containerd的区别
Docker 是套了壳的 containerd,K8s 现在只需要里面的发动机,不需要外面的壳。
Kubernetes 1.24 起彻底移除了 dockershim,不再直接支持 Docker 作为容器运行时。Docker 本质是"全家桶",内部跑容器其实也是调用 containerd,中间多了一层 dockershim 适配,链路更长、开销更大。containerd 是专注于容器生命周期管理的轻量级运行时,原生支持 CRI 接口,与 Kubelet 直接对接,架构更简洁、性能更好、资源占用更低。两者都兼容 OCI 标准镜像,所以 Docker 构建的镜像在 containerd 上完全能跑。
二、规划资源(2+节点)
本文通过2节点部署,如下规划
IP | 用途 |
10.211.55.16 | master |
10.211.55.23 | node1 |
三、部署及配置
1、修改主机名
hostnamectl set-hostname master echo "10.211.55.16 master 10.211.55.23 node1" >> /etc/hostshostnamectl set-hostname node1 echo "10.211.55.16 master 10.211.55.23 node1" >> /etc/hosts2、关闭swap分区和selinux(master、node均执行)
1)临时生效
关闭swap分区:swapoff -a 关闭selinux:setenforce 02)永久生效
关闭swap分区:
vim /etc/fstab
找到类似下面的行(如果有)并注释,重启后生效:
#UUID=2eca519a-00ef-4183-8562-3ff29b3e18c9 none swap defaults 0 0
关闭selinux:
vim /etc/selinux/config
修改SELINUX为SELINUX=disabled,重启后生效
3、安装软件(master、node均执行)
dnf install kubernetes-kubeadm kubernetes containerd -y4、配置containerd服务(master、node均执行)
rm -rf /etc/containerd/config.toml containerd config default > /etc/containerd/config.toml sed -i "s/registry.k8s.io\/pause:3.8/docker.1ms.run\/kubesphere\/pause:3.9/g" /etc/containerd/config.toml5、启动服务并设置开机自启(master、node均执行)
systemctl enable --now containerd kubelet6、配置所需模块(master、node均执行)
cat > /etc/modules-load.d/br-netfilter.conf << EOF br_netfilter EOF重启后验证
lsmod | grep br_netfilter
7、配置内核参数(master、node均执行)
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF#使参数生效
sysctl --system
8、初始化k8s集群(master执行)
kubeadm init --kubernetes-version=1.29.15 --apiserver-advertise-address=10.211.55.16 --image-repository docker.1ms.run/kubesphere --service-cidr=1.1.0.0/16 --pod-network-cidr=1.2.0.0/169、node加入集群(node执行)
kubeadm join 10.211.55.16:6443 --token z9cugw.dhgih1ocpw7fc2nq --discovery-token-ca-cert-hash sha256:513506880e3bed9dc630a062dcc31c5dd8a39df32e2eaa7c52870f4950eb1a6b10、创建kubectl(一般master执行,也可配置node)
1)临时生效
export KUBECONFIG=/etc/kubernetes/admin.conf2)永久生效
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config11、创建calico网络(master执行)
1)下载配置文件
git clone https://gitee.com/koji_docker/k8s.git2)应用calico网络
kubectl apply -f k8s/calico/v3.28.0/calico.yaml3)查看状态
kubectl get nodes四、验证
1、下载demo
git clone https://gitee.com/koji_docker/k8s.git2、部署
kubectl apply -f k8s/demo/myos.yaml3、查看pod
kubectl get pods -n demo4、容器访问及执行命令
kubectl exec -it -n demo myos-5bc54f97dc-f8xnm -- bash