在 CentOS 上使用 Kubernetes 部署微服务的实操指南
一 环境准备与集群初始化
hostnamectl set-hostname k8s-master / k8s-node1/etc/hosts:192.168.10.10 k8s-master
192.168.10.11 k8s-node1
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
swapoff -a
sed -i '/swap/d' /etc/fstab
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
modprobe br_netfilter
sysctl --system
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{ "exec-opts": ["native.cgroupdriver=systemd"] }
EOF
systemctl restart docker
yum install -y containerd
containerd config default > /etc/containerd/config.toml
systemctl enable --now containerd
cat <<EOF >/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet
kubeadm init \
--apiserver-advertise-address=192.168.10.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.27.0 \
--pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubeadm join ... 命令在各 Worker 上执行,加入成功后:kubectl get nodes
以上步骤覆盖了在 CentOS 上搭建可用 Kubernetes 集群的关键环节,包括系统调优、容器运行时配置、组件安装、集群初始化与网络插件部署。
二 构建镜像与推送
docker build -t myorg/myapp:1.0 .
docker login
docker push myorg/myapp:1.0
三 部署微服务到 Kubernetes
k8s/
├── gateway.yaml
├── auth.yaml
├── system.yaml
├── mysql-stateful.yaml
├── redis-stateful.yaml
├── nacos-stateful.yaml
└── namespace.yaml
# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: microservice
# gateway.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway
namespace: microservice
spec:
replicas: 2
selector:
matchLabels:
app: gateway
template:
metadata:
labels:
app: gateway
spec:
containers:
- name: gateway
image: myorg/gateway:1.0
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 20
periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: gateway
namespace: microservice
spec:
type: NodePort
selector:
app: gateway
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080
# mysql-stateful.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: microservice
spec:
serviceName: mysql-headless
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
env:
- name: MYSQL_ROOT_PASSWORD
value: "StrongPassw0rd!"
ports:
- containerPort: 3306
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:
- name: data
persistentVolumeClaim:
claimName: mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
name: mysql-headless
namespace: microservice
spec:
clusterIP: None
selector:
app: mysql
ports:
- port: 3306
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
namespace: microservice
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/gateway.yaml
kubectl apply -f k8s/mysql-stateful.yaml
kubectl -n microservice get pods,svc
curl http://<任一节点IP>:30080/health
要点:将 MySQL、Redis、Nacos 等有状态服务用 StatefulSet 管理;将 Gateway、Auth、System 等无状态服务用 Deployment 管理;通过 Service 暴露访问入口,必要时使用 NodePort/Ingress 对外提供访问。
四 服务发现与配置管理
http://mysql:3306;跨命名空间使用 http://mysql.microservice.svc.cluster.local:3306。kubectl -n microservice create secret generic db-secret \
--from-literal=root-password='StrongPassw0rd!'
在微服务架构中,服务发现、配置与密钥管理是解耦与运维自动化的核心能力,配合 Service 与 DNS 可实现稳定可靠的通信。
五 运维与扩展
kubectl -n microservice set image deployment/gateway gateway=myorg/gateway:1.1
kubectl -n microservice rollout status deployment/gateway
kubectl -n microservice rollout undo deployment/gateway
kubectl -n microservice scale deployment gateway --replicas=4
kubectl -n microservice logs -f deployment/gatewaykubectl -n microservice describe pod <pod>,检查镜像、资源、探针与挂载。