一、集群环境初始化
1.1 节点基础环境配置
克隆4台CentOS7虚拟机,配置2核CPU、2G内存,使用MobaXterm远程连接所有节点。其中我的docker1是master子机,docker2,docker3,docker4是worker节点子机。
关闭SELinux(关闭强制访问控制,避免权限拦截影响集群组件通信)
bash
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
getenforce
安装时间同步服务(保证集群节点时间一致,避免因时间偏差导致证书、令牌验证失败)
bash
yum install -y chrony
配置阿里云NTP时间服务器(统一时间源,确保集群内节点时间精准同步)
bash
sudo bash -c 'cat > /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.0.0/16
local stratum 10
EOF'
重启时间同步服务并验证(校验时间同步服务是否正常运行)
bash
systemctl restart chronyd
chronyc sources -v

关闭Swap分区(K8s强制要求,关闭Swap可保证资源调度的稳定性,避免性能波动)
bash
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
1.2 内核参数优化
bash
sudo bash -c 'cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF'
加载网桥模块并生效内核参数(开启网络转发与桥接过滤,保障Pod网络通信与Service流量转发正常)
bash
sudo modprobe br_netfilter
sudo sysctl --system
sysctl net.bridge.bridge-nf-call-iptables net.ipv4.ip_forward
1.3 Docker 环境部署
配置Docker清华yum源(使用国内镜像源,提升Docker组件安装速度)
ini
# /etc/yum.repos.d/docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
[centos]
name=extras
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
gpgcheck=0
安装并开机自启Docker
bash
yum install -y docker-ce
systemctl enable --now docker
配置Docker核心参数(指定私有仓库镜像加速、统一cgroup驱动与宿主机一致、信任私有仓库,解决镜像拉取与驱动不匹配问题)
bash
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://reg.westos.org"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"insecure-registries": ["reg.westos.org"]
}
EOF
重启Docker服务
bash
systemctl restart docker
所有节点同步Harbor证书(保证节点与私有仓库通信的证书一致性,避免证书验证失败)
bash
scp -r /etc/docker/certs.d/ docker2:/etc/docker/
验证私有镜像拉取(测试Docker与私有仓库的连通性)
bash
docker pull nginx
1.4 安装K8s组件
配置阿里云K8s yum源(国内镜像源,保障K8s组件安装顺畅)
ini
# /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
安装指定版本kubeadm/kubelet/kubectl(固定版本,避免版本差异导致集群兼容问题)
bash
yum install -y kubelet-1.23.17-0 kubeadm-1.23.17-0 kubectl-1.23.17-0
systemctl enable --now kubelet
Harbor私有仓库部署
拷贝离线包与证书到Master节点(统一部署私有仓库,集中管理集群镜像)
bash
scp harbor-all.tar.gz root@192.168.201.141:/root/
scp -r /etc/docker/certs.d root@192.168.201.141:/etc/docker/
解压部署Harbor
bash
tar zxf harbor-all.tar.gz
mkdir -p /data
cp -r certs /data/ 2>/dev/null
systemctl stop firewalld
echo "192.168.201.142 reg.westos.org" >> /etc/hosts
配置Docker信任私有仓库
bash
echo '{"insecure-registries":["reg.westos.org"]}' > /etc/docker/daemon.json
systemctl restart docker
登录Harbor(完成私有仓库身份鉴权,为后续镜像上传做准备)
bash
docker login reg.westos.org
# 账号 admin 密码 westos
拉取K8s集群初始化镜像(提前拉取集群所需基础镜像,提升初始化速度)
bash
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
批量打标签并上传集群镜像到Harbor(将集群镜像统一存入私有仓库,避免依赖外网镜像,保障集群部署稳定性)
bash
docker images |grep google_containers | awk '{print $1":"$2}' | awk -F/ '{system("docker tag "$0" reg.westos.org/k8s/"$3"")}'
docker images |grep k8s | awk '{system("docker push "$1":"$2"")}'

1.5 Master节点集群初始化
清理旧集群残留(彻底清除之前的集群残留配置,避免干扰新集群部署)
bash
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
kubeadm reset -f
rm -rf /etc/cni/net.d /root/.kube
iptables -F && iptables -t nat -F
初始化集群,指定Pod网段与私有镜像仓库(定义Pod网络网段,使用私有仓库镜像,保障集群初始化安全与高效)
bash
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s --kubernetes-version v1.23.17

1.6 配置kubectl环境变量
bash
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
查看集群节点状态(初始节点未就绪,因未安装网络插件,后续需部署网络插件)
bash
kubectl get node
kubectl get pod -A

1.7 kubectl 命令自动补全
bash
yum install -y bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
提升kubectl操作效率,减少命令输入错误
二、Calico 网络插件部署
2.1 镜像上传私有仓库
官网下载calico.yaml文件,并拉取Calico镜像(获取网络插件所需镜像,为Pod网络通信提供支撑)
bash
docker pull quay.io/calico/cni:v3.31.0
docker pull quay.io/calico/node:v3.31.0
docker pull quay.io/calico/kube-controllers:v3.31.0
批量打标签并推送至Harbor(将Calico镜像存入私有仓库,统一管理网络插件镜像)
bash
docker images |grep calico | awk '{print $1":"$2}' | awk -F/ '{system("docker tag "$0" reg.westos.org/calico/"$3"")}'
docker images |grep 'reg.westos.org/calico' | awk '{system("docker push "$1":"$2"")}'

修改yaml镜像地址为私有仓库(适配私有仓库环境,避免镜像拉取失败)
bash
sed -i 's#quay.io/#reg.westos.org/#g' calico.yaml
2.2 部署网络插件
bash
kubectl apply -f calico.yaml
部署Calico网络插件,为集群Pod提供网络通信与管理能力
验证Pod运行状态(检查Calico组件是否正常运行,保障网络插件生效)
bash
kubectl get pod -A |grep calico
查看节点就绪状态(节点就绪后,Pod网络通信正常,集群网络架构搭建完成)
bash
kubectl get node
2.3 Worker节点扩容加入集群
清理Docker残留代理配置(解决代理导致的私有仓库连接失败问题)
bash
mkdir -p /etc/systemd/system/docker.service.d
rm -rf /etc/systemd/system/docker.service.d/http-proxy.conf
rm -rf /etc/systemd/system/docker.service.d/proxy.conf
systemctl daemon-reload
systemctl restart docker
重新登录Harbor(恢复私有仓库正常访问权限)
bash
docker login reg.westos.org
Master生成最新加入命令(生成有效集群加入令牌,保障Worker节点安全加入)
bash
kubeadm token create --print-join-command
Worker节点执行加入集群
bash
kubeadm join 192.168.201.141:6443 --token ejlqfh.kjz4uakgopcv8lne --discovery-token-ca-cert-hash sha256:5da6e15855c10919f4bd3bc364fe9794a86b3e2ac5aa809229216fefd993a879
Master查看全部节点(验证所有节点成功加入集群,完成集群扩容)
bash
kubectl get nodes

三、业务应用部署运维
3.1 业务镜像上传Harbor
加载本地镜像包(myapp.tar文件包在官网下载,导入自定义业务镜像,为应用部署提供基础)
bash
docker load -i myapp.tar
重打私有仓库标签(规范镜像标签,适配私有仓库存储规范)
bash
docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2
推送镜像到仓库(将业务镜像存入私有仓库,统一管理应用镜像)
bash
docker push reg.westos.org/library/myapp:v1
docker push reg.westos.org/library/myapp:v2

3.2 创建Deployment控制器
bash
kubectl create deployment myapp --image=reg.westos.org/library/myapp:v1 --replicas=3
创建Deployment控制器,定义应用副本数与镜像,实现Pod生命周期自动化管理
查看Pod与部署状态(验证应用Pod是否正常启动,检查部署资源状态)
bash
kubectl get pod
kubectl get deployments.apps
删除Pod验证自愈能力(测试Deployment控制器的副本自动修复能力,保障应用高可用)
bash
kubectl delete pod myapp-678fcbc488-jcjqg
kubectl get deployments.apps
kubectl get pod
进入Pod内部执行命令(验证Pod内应用运行状态,排查应用部署问题)
bash
kubectl exec myapp-678fcbc488-p7crf -- ls /usr/share/nginx/html
3.3 Pod 扩容与缩容
扩容副本(动态调整应用实例数量,应对流量峰值)
bash
kubectl scale deployment myapp --replicas=6
kubectl get pod

缩容副本(动态减少应用实例数量,节约资源成本)
bash
kubectl scale deployment myapp --replicas=3
kubectl get pod
3.4 Service服务暴露
创建ClusterIP类型Service(仅集群内访问,保障应用服务安全访问)
bash
kubectl expose deployment myapp --port=80 --target-port=80
查看服务详情(了解Service端口映射、后端Pod关联等信息,排查服务访问问题)
bash
kubectl describe svc myapp

访问集群内部服务(测试Service对Pod的流量转发与负载均衡能力)
bash
curl 10.108.255.190
curl 10.108.255.190/hostname.html
3.5 查看版本历史
bash
kubectl rollout history deployment myapp
查看Deployment的版本迭代记录,为应用版本管理与回滚提供依据
3.6 应用版本回滚
bash
kubectl rollout undo deployment myapp --to-revision=1
curl 10.108.255.190
回滚到指定历史版本,快速修复应用部署异常
3.7 删除应用资源
bash
kubectl delete deployments.apps myapp
kubectl delete svc myapp
kubectl get pod
清理应用部署资源,释放集群资源
名称空间资源隔离
bash
kubectl get ns
通过名称空间实现集群资源逻辑隔离,便于多租户或多应用环境下的资源管理与权限划分。
注意!
1.Master节点操作(其中一台主要虚拟机)
集群初始化、配置kubectl环境变量、安装Calico网络插件、生成节点加入命令、部署业务Pod、Service暴露、版本查看与回滚、集群状态查询。
2.Worker节点操作(另外三台虚拟机)
清理Docker代理配置、登录私有Harbor仓库、执行join命令加入集群。
3.所有节点共同操作
系统初始化、时间同步、关闭swap、内核优化、安装Docker与k8s组件、同步仓库证书。