> 技术文档 > k8s使用kubeadm方式部署集群

k8s使用kubeadm方式部署集群


K8s是什么:

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台,其遵循主从式架构设计、组件可以分为工作节点(Node)组件,和控制平面组件。

可以理解为它是容器编排工具

(其他概念知识自行了解补充)

部署k8s机器环境:

准备环境:(openEuler 24.0)

192.168.10.101 k8s-master

192.168.10.102 k8s-node1

192.168.10.103 k8s-node2

我三台都是4核8g

基础环境准备:

注意:

Kubernetes v1.23支持高达5000节点。更准备地说,在使用Kubernetes时,应当遵循以下所有准则:

  • 每个节点不要超过110个Pod,
  • 集群不要超过5000节点,
  • 集群不要超过150000个Pod,
  • 不要超过300000个Container。

第一步:

基础环境准备:设置好主机名 安装基础工具

* : hostnamectl set-hostname k8s-master ...

第二步:(已经有docker环境不用做)

准备docker环境 ,因为k8s1.23的版本容器运行时还是docker,1.24以上默认是c..d , 自己准备就可以

(1):需要关闭的

*:systemctl stop firewalld 

systemctl disable firewalld 

*:setenforce 0 

sed -i \'/^SELINUX=/s/enforcing/disabled/\' /etc/selinux/config 

(2):然后禁用swap分区

swapoff -a 

sed -i \'/swap/s/^/#/\' /etc/fstab

(3)安装docker

下载源 :curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

替换仓库地址:

sed -i \'s/$releasever/8/g\' /etc/yum.repos.d/docker-ce.repo

sed -i \'s/$basearch/x86_64/g\' /etc/yum.repos.d/docker-ce.repo

dnf clean all

dnf makecache

dnf -y install docker-ce

安装完成后启动自动生成daemon.json

systemctl daemon-reload

systemctl start docker

systemctl enable docker

注意docker安装好是拉取不了镜像的,我们要替换一下国内镜像站:

cat>/etc/docker/daemon.json<{\"exec-opts\": [\"native.cgroupdriver=systemd\"], \"registry-mirrors\": [ \"https://docker.m.daocloud.io\", \"https://docker.imgdb.de\", \"https://docker-0.unsee.tech\", \"https://docker.hlmirror.com\" ]}EOF

优化内核参数:

cat>> /etc/sysctl.conf <net.ipv4.ip_forward=1net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1EOF

sysctl -p

然后重新启动docker

开始部署kubernetes集群 :

(确保主机名已经设置)

添加三台主机的域名解析  注意替换为自己的实际信息

cat <>/etc/hosts192.168.10.101 k8s-master192.168.10.102 k8s-node01192.168.10.103 k8s-node02EOF

然后三个节点都要执行:替换k8syum源

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

然后 dnf clean all

现在安装 kubelet kubeadm kubectl

dnf -y install kubelet-1.23 kubeadm-1.23 kubectl-1.23

三个节点设置开机启动 :

systemctl enable kubelet 

注意:(kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点或初始化为 master 后才可启动成功。)

在k8s-master上:生成初始化配置文件

kubeadm config print init-defaults > init-config.yaml 

执行完后 /root/ 目录下会有这个yaml文件

然后修改一下这个yaml文件

修改内容:

12行 advertiseAddress: (自己master节点ip)17行 name: k8s-master30行imageRepository: registry.aliyuncs.com/google_containers36行 podSubnet: 10.244.0.0/16

pod的Subent里的ip信息是要跟后面网络组件yaml里信息保持一致的不然会有问题

然后拉取所需要的镜像:(可以提前准备好离线镜像)

master节点操作:

kubeadm config images list --config init-config.yaml  可以查看需要的镜像

kubeadm config images pull --config=init-config.yaml (实际上不用执行也是可以的)

开始初始master:

kubeadm init --config=init-config.yaml 

执行结束后会有生成的token:保存好 把token命令到两个node节点执行 例如:

kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef \\

    --discovery-token-ca-cert-hash sha256:8b17b7d607ab7f79c2249c58d74525368bbb15ad884c365aaa1a968b9833d107

(如果出错要重新初始化 一定要 kubeadm reset )

初始化完毕后会有三条命令要执行:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

 在 k8s-master 节点设置环境变量并查看节点信息:

echo \"export KUBECONFIG=/etc/kubernetes/admin.conf\" >> ~/.bash_profilesource ~/.bash_profile

然后 可以在master 上 kubectl get nodes kubectl get pod -A

(因为此时还没安装网络插件,coredns无法获得解析的IP,就会使得coredns处于pending状态。各个节点的状态也处于NotReady的状态,这些异常情况待安装过网络插件后都会自行解决。)

部署 Calico 网络插件:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

同样这里我也提供已经修改好的calico.yaml文件:

我这里做不了资源绑定,可以私信我

后面得到了calico.yaml后运行命令:kubectl apply -f calico.yaml

后续再次查看kubectl get nodes

等待状态变为Ready就成功了