K8S-单Master集群部署

一、 服务器环境及初始化

1、架构分析

集群角色 主机名 操作系统 IP地址
master k8s-master OpenEuler24.03 192.168.137.115
node k8s-node1 OpenEuler24.03 192.168.137.116
node k8s-node2 OpenEuler24.03 192.168.137.117

2、初始化

所有节点都需要初始化!

2.1、清空Iptales默认规则及关闭防火墙

复制代码
iptables -t nat -F
iptables -t filter -F
systemctl disable --now firewalld

2.2、关闭SELINUX

复制代码
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 

2.3、关闭Swap交换空间

复制代码
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab 

2.4、设置主机名

复制代码
hostnamectl set-hostname k8s-master
​
hostnamectl set-hostname k8s-node1
​
hostnamectl set-hostname k8s-node2
​

2.5、编写hosts文件

复制代码
cat <<EOF > /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.137.115   k8s-master
192.168.137.116   k8s-node1
192.168.137.117   k8s-node2
EOF

###拷贝到node节点
scp /etc/hosts 192.168.137.116:/etc
scp /etc/hosts 192.168.137.117:/etc

2.6、设置内核参数

注意:安装完成docker-ce并启动之后方可设置!

复制代码
cat <<EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
​
modprobe br_netfilter
sysctl net.bridge.bridge-nf-call-ip6tables=1
sysctl net.bridge.bridge-nf-call-iptables=1
​
sysctl -p

二、安装Docker环境

所有节点都需要安装!

1、安装Docker

1.1、配置阿里源

复制代码
​
cat <<EOF >> /etc/yum.repos.d/docker-ce.repo 
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/9/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
​

1.2、安装docker

复制代码
yum install -y docker-ce-28.0.3
​

1.3、启动docker

复制代码
​
cat <<EOF >>/etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://0vmzj3q6.mirror.aliyuncs.com",
        "https://docker.m.daocloud.io",
        "https://mirror.baidubce.com",
        "https://dockerproxy.com",
        "https://mirror.iscas.ac.cn",
        "https://huecker.io",
        "https://dockerhub.timeweb.cloud",
        "https://noohub.ru",
        "https://vlgh0kqj.mirror.aliyuncs.com"
    ]
}
EOF
systemctl daemon-reload
systemctl enable --now docker

2、安装cri-docker

下载地址:https://github.com/Mirantis/cri-dockerd/releases

复制代码
yum install -y libcgroup
rpm -ivh cri-dockerd-0.3.8-3.el8.x86_64.rpm
#或者
yum localinstall cri-dockerd-0.3.8-3.el8.x86_64.rpm 

修改CRI启动脚本

复制代码
vim /usr/lib/systemd/system/cri-docker.service 
​
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

启动cri

复制代码
    systemctl daemon-reload
    systemctl enable --now cri-docker
​

三、安装kubeadm和kubectl

所有节点都需要安装!

1、配置yum源

复制代码
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

2、安装

复制代码
yum install -y kubelet kubeadm kubectl
​

3、设置kubectl开机自启动

复制代码
systemctl enable kubelet && systemctl start kubelet
​

4、启动kubeadm和kubectl命令补齐功能

复制代码
source <(kubeadm completion bash)
source <(kubectl completion bash)
​
echo -e "source <(kubeadm completion bash)\nsource <(kubectl completion bash)" >>  /root/.bashrc 
source /root/.bashrc

四、部署Master节点

在k8s-master节点执行下述命令:

复制代码
kubeadm init --apiserver-advertise-address=192.168.137.115 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.15 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --cri-socket=unix:///var/run/cri-dockerd.sock

命令解析:

--apiserver-advertise-address:指定 API Server 监听的 IP 地址。如果没有设置,则将使用默认的网络接口。

--image-repository:指定镜像仓库地址。默认值为"registry.k8s.io",但该仓库在中国无法访问,因此这里指定阿里云仓库。

--kubernetes-version:指定 Kubernetes 版本。

--pod-network-cidr:指定 Pod 网络的 CIDR 地址范围。

--service-cidr:指定 Service 网络的 CIDR 地址范围。

--cri-socket:指定 kubelet 连接容器运行时的 UNIX 套接字文件。

执行命令后,kubeadm 会执行一系列任务,具体如下:

复制代码
[preflight]:该阶段执行一系列检查,验证当前系统环境是否满足 Kubernetes 的安装要求,包括:
​
CPU 和内存是否满足最低要求。
​
网络是否正常。
​
操作系统版本是否满足要求。
​
容器运行时是否可以连接。
​
内核参数是否正确配置。
​
下载所需的容器镜像。
​
 [certs]:生成 Kubernetes 组件所需的 HTTPS 证书和密钥,并将其存储到“/etc/ kubernetes/pki”目录中。
​
 [kubeconfig]:生成 kubeconfig 文件,其中包含 API Server 地址、客户端证书等信息,并将其存储在“/etc/kubernetes”目录中。
​
 [kubelet-start]:生成 kubelet 配置文件“/var/lib/kubelet/config.yaml”并启动 kubelet服务。
​
 [control-plane]:为 kube-apiserver、kube-controller-manager 和 kube-scheduler 创建静态 Pod 资源文件,并将其存储到“/etc/kubernetes/manifests”目录中。
​
 [etcd]:为 etcd 创建静态 Pod 资源文件,并将其存储在“/etc/kubernetes/manifests”目录中。
​
 [wait-control-plane]:等待 kubelet 从目录“/etc/kubernetes/manifest”中以静态 Pod的形式启动 Master 组件。
​
 [apiclient]:检查 Master 组件是否健康。
​
 [upload-config]:将 kubeadm 配置存储在 ConfigMap 对象中。
​
 [kubelet]:将 kubelet 配置存储在 ConfigMap 对象中。
​
 [upload-certs]:提示用户跳过证书上传。
​
 [mark-control-plane]:给 Master 节点添加标签和污点。
​
 [bootstrap-token]:生成引导令牌,供 Node 节点在加入集群时使用。
​
 [kubelet-finalize]:更新 kubelet 配置文件(/etc/kubernetes/kubelet.conf)。
​
 [addons]:安装 CoreDNS 和 kube-proxy 插件。

出问题后,集群还原

复制代码
kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

注意保存证书文件

每个人的证书是不一致的,注意查看自己的证书。

复制代码
kubeadm join 192.168.137.115:6443 --token lc8z1k.j8lnrixca1e61cgp \
        --discovery-token-ca-cert-hash sha256:662fecb08139e912c204c079902a8ed310f460ed6971d6537406d8740eb316b7

配置管理集群文件

复制代码
mkdir -p $HOME/.kube
cd /root/.kube
cp /etc/kubernetes/admin.conf ./config
​
###查看集群状态
kubectl get nodes
​

五、部署node节点

分别在k8s-node1和k8s-node2中执行:

复制代码
kubeadm join 192.168.137.115:6443 --token yfpfev.qcwe566xkv0v646b \
        --discovery-token-ca-cert-hash sha256:17288e006a6f1c0a8c4ac6b1311c1f3792edc93179d3fc84a0efb4a10ffc19fa   --cri-socket=unix:///var/run/cri-dockerd.sock

查看集群状态:

复制代码
[root@k8s-master ~]# kubectl get nodes 
NAME         STATUS     ROLES           AGE     VERSION
k8s-master   NotReady   control-plane   2d16h   v1.28.15
k8s-node1    NotReady   <none>          2d16h   v1.28.15
k8s-node2    NotReady   <none>          2m14s   v1.28.15
​

目前看到的是NotReady状态,是由于没有安装网络插件的原因。ROLES角色一栏显示"none",可以通过一下命令修改角色名称:

复制代码
kubectl label node k8s-master node-role.kubernetes.io/master=master
kubectl label node k8s-node1 node-role.kubernetes.io/worker=worker
kubectl label node k8s-node2 node-role.kubernetes.io/worker=worker
​

六、部署网络插件

calico组件的相关镜像,目前在国内无法下载。需要在master主机先创建calico的相关资源,然后查看所需镜像,最后通过外网服务器进行下载。具体的操作流程如下:

提交资源清单:

复制代码
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml [root@k8s-master ~]# kubectl create -f tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml
##编辑网络信息
vim custom-resources.yaml 
apiVersion: operator.tigera.io/v1 
kind: Installation 
metadata: 
 name: default 
spec: 
 calicoNetwork: 
 ipPools: 
 - blockSize: 26 
 cidr: 10.244.0.0/16 # 修改此值,与“kubeadm init”命令中指定的 Pod 网络CIDR 地址范围保持一致
 encapsulation: VXLANCrossSubnet 
 natOutgoing: Enabled 
 nodeSelector: all() 
... 
[root@k8s-master ~]# kubectl create -f custom-resources.yaml

资源提交后,使用下述命令列出所需的镜像文件:

复制代码
​
[root@k8s-master ~]# kubectl -n calico-system describe pod | grep "Image:" | sort | uniq 
    Image:           docker.io/calico/cni:v3.26.0
    Image:           docker.io/calico/csi:v3.26.0
    Image:           docker.io/calico/kube-controllers:v3.26.0
    Image:           docker.io/calico/node-driver-registrar:v3.26.0
    Image:           docker.io/calico/node:v3.26.0
    Image:           docker.io/calico/pod2daemon-flexvol:v3.26.0
    Image:           docker.io/calico/typha:v3.26.0
 [root@k8s-master ~]# kubectl -n calico-apiserver describe pod calico-apiserver-894947d4b-bqc7x  | grep -i 'image:'
    Image:           docker.io/calico/apiserver:v3.26.0
    
    
    kubectl -n calico-system delete pod calico-node-8spwx #重启 calico-node pod(触发重新拉取):
相关推荐
AAA@峥1 天前
容器数据不丢失:Docker 分层存储 + Volume 共享、备份迁移完整指南
运维·docker·容器
十年磨一剑~1 天前
docker 为何每次 docker tag才能 docker push
docker·容器·eureka
gs801401 天前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
bukeyiwanshui1 天前
20260701 k8s Metric Server
容器·贪心算法·kubernetes
江湖有缘1 天前
基于Docker环境部署tillywork开源工作管理工具
docker·容器·开源
鸿儒5171 天前
MR-50国产化GPU docker配置方法
docker·容器·mr
Zhu7581 天前
在k8s集群部署ApacheHadoop单节点单数据副本
云原生·容器·kubernetes
Akamai中国1 天前
Akamai收购安全企业浏览器提供商LayerX
人工智能·云原生·云计算·云服务
摇滚侠1 天前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 51-60
java·云原生·kubernetes