搭建 Kubernetes 集群

1初始操作

创建三台服务器,并进行初始化操作

bash 复制代码
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 关闭完swap后,一定要重启一下虚拟机!!!
# 根据规划设置主机名
hostnamectl set-hostname <hostname>

# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.74.21 k8s-master
192.168.74.22 k8s-node1
192.168.74.23 k8s-node2
EOF


# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system  # 生效


# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

2安装基础软件

2.1安装docker

2.2添加阿里云yum源

bash 复制代码
cat > /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

2.3安装 kubeadm、kubelet、kubectl

bash 复制代码
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

systemctl enable kubelet

# 配置关闭 Docker 的 cgroups,修改 /etc/docker/daemon.json,加入以下内容
"exec-opts": ["native.cgroupdriver=systemd"]

# 重启 docker
systemctl daemon-reload
systemctl restart docker

3初始化 Master 节点

bash 复制代码
# 在 Master 节点下执行

kubeadm init \
      --apiserver-advertise-address=192.168.74.21 \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version v1.23.6 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16

# 安装成功后,复制如下配置并执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes

4. 加入 Kubernetes Node

bash 复制代码
分别在 k8s-node1 和 k8s-node2 执行
 
此命令可以在 k8s master 控制台初始化成功后复制 join 命令

kubeadm join 192.168.74.21:6443 --token qseaja.rfqpl5nvrmaio2jt \
	--discovery-token-ca-cert-hash sha256:f53995b69f1e5b1bb461fab38b44c41c63d8f803f6fbf78eedc8aafb1f73e308 

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE    VERSION
k8s-master   NotReady   control-plane,master   22m    v1.23.6
k8s-node1    NotReady   <none>                 114s   v1.23.6
k8s-node2    NotReady   <none>                 35s    v1.23.6



扩展:
# 如果初始化的 token 不小心清空了,可以通过如下命令获取或者重新申请
# 如果 token 已经过期,就重新申请
kubeadm token create

# token 没有过期可以通过如下命令获取
kubeadm token list

# 获取 --discovery-token-ca-cert-hash 值,得到值后需要在前面拼接上 sha256:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

5配置cni网络设置(flannel.yml)

bash 复制代码
wget --no-check-certificate https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -O flannel.yml


# 部署Flannel到集群(自动创建DaemonSet,所有节点运行Flannel Pod)
kubectl apply -f flannel.yml


正常输出(说明资源创建成功):
plaintext
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

手动拉取 Flannel 镜像
docker pull rancher/mirrored-flannelcni-flannel:v0.19.0
docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0

[root@k8s-master vfs]# kubectl get pods -n kube-flannel
NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel-ds-p2bth   1/1     Running   0          15m
kube-flannel-ds-vq6z2   1/1     Running   0          15m
kube-flannel-ds-zpkmf   1/1     Running   0          15m

6测试 kubernetes 集群

bash 复制代码
# 创建部署
kubectl create deployment nginx --image=nginx

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看 pod 以及服务信息
kubectl get pod,svc
相关推荐
运维老郭44 分钟前
【K8s运维实战】Kubernetes临时存储卷实战:emptyDir核心用法与gitRepo弃用迁移指南
运维·云原生·kubernetes
AAA@峥5 小时前
容器数据不丢失:Docker 分层存储 + Volume 共享、备份迁移完整指南
运维·docker·容器
十年磨一剑~6 小时前
docker 为何每次 docker tag才能 docker push
docker·容器·eureka
gs801408 小时前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
bukeyiwanshui9 小时前
20260701 k8s Metric Server
容器·贪心算法·kubernetes
江湖有缘9 小时前
基于Docker环境部署tillywork开源工作管理工具
docker·容器·开源
鸿儒51711 小时前
MR-50国产化GPU docker配置方法
docker·容器·mr
Zhu75812 小时前
在k8s集群部署ApacheHadoop单节点单数据副本
云原生·容器·kubernetes
Akamai中国13 小时前
Akamai收购安全企业浏览器提供商LayerX
人工智能·云原生·云计算·云服务