如何在CentOS上使用Kubernetes进行微服务部署
导读:在 CentOS 上使用 Kubernetes 部署微服务的实操指南 一 环境准备与集群初始化 规划与要求 操作系统:CentOS 7.x/8.x 节点:至少 2 台(1 个 Master + 1 个 Worker) 资源:每节点至少...
在 CentOS 上使用 Kubernetes 部署微服务的实操指南
一 环境准备与集群初始化
- 规划与要求
- 操作系统:CentOS 7.x/8.x
- 节点:至少 2 台(1 个 Master + 1 个 Worker)
- 资源:每节点至少 2 GB 内存、2 核 CPU、30 GB 磁盘
- 主机名与解析(所有节点)
- 设置主机名:
hostnamectl set-hostname k8s-master/k8s-node1 - 写入
/etc/hosts:192.168.10.10 k8s-master 192.168.10.11 k8s-node1
- 设置主机名:
- 系统与安全配置(所有节点)
- 关闭防火墙与 SELinux:
systemctl stop firewalld & & systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config - 关闭 Swap:
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
- 关闭防火墙与 SELinux:
- 安装容器运行时(Docker 或 Containerd,二选一)
- Docker(推荐)
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 - Containerd(K8s 1.24+ 常用)
yum install -y containerd containerd config default > /etc/containerd/config.toml systemctl enable --now containerd
- Docker(推荐)
- 安装 kubeadm/kubelet/kubectl(所有节点)
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 - 初始化 Master(示例)
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 - 安装 CNI 网络插件(任选其一)
- Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml - Calico:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- Flannel:
- 加入 Worker 节点
- 在 Master 初始化完成后,使用输出的
kubeadm join ...命令在各 Worker 上执行,加入成功后:kubectl get nodes
- 在 Master 初始化完成后,使用输出的
以上步骤覆盖了在 CentOS 上搭建可用 Kubernetes 集群的关键环节,包括系统调优、容器运行时配置、组件安装、集群初始化与网络插件部署。
二 构建镜像与推送
- 构建镜像(示例为 Node.js)
docker build -t myorg/myapp:1.0 . - 推送镜像(建议使用私有仓库或镜像托管)
docker login docker push myorg/myapp:1.0 - 说明
- 微服务多组件需分别构建镜像并打上语义化标签(如 v1.0、v1.1),便于滚动升级与回滚。
- 内网环境可部署 Harbor 或使用企业镜像仓库,保证镜像可达与访问控制。 上述镜像构建与推送流程是将应用交付到 Kubernetes 的前置步骤,适用于常见语言与框架。
三 部署微服务到 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 - 无状态服务(Deployment + Service,示例:gateway)
# 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 - 有状态服务(StatefulSet,示例:MySQL)
# 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 对外提供访问。
四 服务发现与配置管理
- 服务发现
- Kubernetes Service DNS:同一命名空间内可直接用服务名访问,例如
http://mysql:3306;跨命名空间使用http://mysql.microservice.svc.cluster.local:3306。
- Kubernetes Service DNS:同一命名空间内可直接用服务名访问,例如
- 配置与密钥
- 使用 ConfigMap 管理非敏感配置,使用 Secret 管理敏感信息(如数据库密码),并在 Pod 中挂载为环境变量或卷。
- 示例(Secret)
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/gateway - 监控:可部署 Prometheus + Grafana 采集指标与可视化大盘,便于容量规划与故障定位。
- 日志:
- 常见问题排查
- Pod 无法启动:查看事件与日志
kubectl -n microservice describe pod < pod>,检查镜像、资源、探针与挂载。 - 节点 NotReady:检查 kubelet 状态、容器运行时、网络插件与节点污点/容忍度。 滚动升级、弹性伸缩与日志监控是生产级微服务的基本运维能力,配合健康检查与就绪探针可显著提升稳定性。
- Pod 无法启动:查看事件与日志
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在CentOS上使用Kubernetes进行微服务部署
本文地址: https://pptw.com/jishu/766043.html
