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就成功了