从小白到精通——Kubernetes部署与管理全攻略
Kubernetes(简称 K8s)是由 Google 开发并开源的容器编排平台,用于自动化。Kubernetes 将自动调度、负载均衡并监控所有微服务。它是现代云原生架构的核心,是 DevOps 的中枢大脑。系统:Ubuntu 20.04+多主节点 + etcd 集群。管理有状态应用(如数据库)实现持续集成与自动化部署。:节点代理,执行容器操作。:负责网络通信与负载均衡。:管理副本、故障恢复等。
一、认识 Kubernetes
Kubernetes(简称 K8s)是由 Google 开发并开源的容器编排平台,用于自动化 容器部署、扩容、网络与负载均衡。
它是现代云原生架构的核心,是 DevOps 的中枢大脑。
一句话总结:Kubernetes 是“集群中的操作系统”,负责让你的容器自动化运行。
核心功能:
-
自动部署与滚动升级
-
自我修复与健康检测
-
负载均衡与服务发现
-
资源调度与弹性伸缩
-
声明式配置与自动管理
二、Kubernetes 架构概览
+-------------------------------------------------------------+ | Master 控制平面 | |-------------------------------------------------------------| | API Server | Scheduler | Controller Manager | etcd 数据库 | +-------------------------------------------------------------+ | | v v +-------------------------------------------------------------+ | Node 工作节点 | |-------------------------------------------------------------| | Kubelet | Kube Proxy | Container Runtime (Docker/Containerd)| +-------------------------------------------------------------+
解释:
-
API Server:统一的集群控制入口
-
etcd:保存集群状态与配置
-
Scheduler:容器调度分配节点
-
Controller Manager:管理副本、故障恢复等
-
Kubelet:节点代理,执行容器操作
-
Kube Proxy:负责网络通信与负载均衡
三、安装 Kubernetes(使用 kubeadm)
1. 环境准备
每台主机需具备:
-
CPU ≥ 2 核
-
内存 ≥ 2GB
-
系统:Ubuntu 20.04+
关闭 swap:
sudo swapoff -a sudo sed -i '/swap/d' /etc/fstab
2. 安装依赖
sudo apt update sudo apt install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update sudo apt install -y kubelet kubeadm kubectl sudo systemctl enable kubelet
3. 初始化主节点
sudo kubeadm init --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
4. 安装网络插件(Flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
5. 加入工作节点
在从节点执行 kubeadm join:
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
验证节点:
kubectl get nodes
输出:
NAME STATUS ROLES AGE VERSION master Ready control-plane 10m v1.29.0 worker1 Ready <none> 5m v1.29.0
四、Kubernetes 核心对象
| 对象 | 作用 |
|---|---|
| Pod | 最小部署单元,封装一个或多个容器 |
| Deployment | 管理 Pod 副本与滚动更新 |
| Service | 提供网络访问与负载均衡 |
| Ingress | 实现 HTTP 路由与域名访问 |
| ConfigMap / Secret | 配置与敏感信息管理 |
| PersistentVolume (PV) | 存储资源 |
| Namespace | 逻辑隔离环境 |
五、创建第一个 Pod
创建 nginx-pod.yaml:
apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx image: nginx ports: - containerPort: 80
部署:
kubectl apply -f nginx-pod.yaml
查看:
kubectl get pods kubectl describe pod nginx-pod
参考案例:www.deggsu.cn
六、Deployment 部署应用
创建 nginx-deploy.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
应用:
kubectl apply -f nginx-deploy.yaml
查看:
kubectl get deployments kubectl get pods -l app=nginx
七、Service 暴露端口
创建 nginx-svc.yaml:
apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort
暴露端口:
kubectl apply -f nginx-svc.yaml kubectl get svc
访问:
http://<NodeIP>:<NodePort>
八、滚动更新与回滚
更新镜像:
kubectl set image deployment/nginx-deploy nginx=nginx:1.23
查看更新状态:
kubectl rollout status deployment/nginx-deploy
回滚:
kubectl rollout undo deployment/nginx-deploy
九、自动扩缩容
CPU 使用率达到 80% 自动扩容:
kubectl autoscale deployment nginx-deploy --min=2 --max=10 --cpu-percent=80
查看扩容状态:
kubectl get hpa
十、配置管理(ConfigMap 与 Secret)
ConfigMap 示例:
kubectl create configmap app-config --from-literal=MODE=production
Secret 示例:
kubectl create secret generic db-secret --from-literal=USER=admin --from-literal=PASS=123456
Pod 引用:
envFrom: - configMapRef: name: app-config - secretRef: name: db-secret
十一、持久化存储(PV 与 PVC)
定义 pv.yaml:
apiVersion: v1 kind: PersistentVolume metadata: name: pv-data spec: capacity: storage: 2Gi accessModes: - ReadWriteOnce hostPath: path: /data/pv
定义 pvc.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Pod 挂载:
volumes: - name: storage persistentVolumeClaim: claimName: pvc-data
十二、Ingress 控制器
安装 Ingress:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
创建 ingress.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress spec: rules: - host: web.local http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: number: 80
访问:
http://web.local
十三、命名空间管理
创建:
kubectl create namespace dev
切换:
kubectl config set-context --current --namespace=dev
查看:
kubectl get ns
十四、监控与日志
查看日志:
kubectl logs <pod-name>
实时查看:
kubectl logs -f <pod-name>
资源监控:
kubectl top pod kubectl top node
十五、Helm 包管理
安装 Helm:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
添加仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami
部署 Nginx:
helm install mynginx bitnami/nginx
查看:
helm list
十六、RBAC 权限控制
创建角色:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: dev name: dev-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"]
绑定用户:
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: read-pods namespace: dev subjects: - kind: User name: devuser roleRef: kind: Role name: dev-reader apiGroup: rbac.authorization.k8s.io
十七、部署 Dashboard
安装:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
访问:
kubectl proxy
打开:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
十八、Kubernetes 与 CI/CD
Jenkinsfile 示例:
pipeline { agent any stages { stage('Build') { steps { sh 'docker build -t myapp:latest .' } } stage('Deploy') { steps { sh 'kubectl apply -f k8s/deployment.yaml' } } } }
实现持续集成与自动化部署。
十九、Kubernetes 高可用与扩展
-
多主节点 + etcd 集群
-
使用
MetalLB或Ingress实现外部访问 -
使用
HorizontalPodAutoscaler自动扩缩容 -
使用
StatefulSet管理有状态应用(如数据库)
二十、完整实战项目:K8s 部署电商微服务系统
目录结构:
k8s/ ├── deployment/ │ ├── user-deploy.yaml │ ├── product-deploy.yaml │ ├── order-deploy.yaml │ └── gateway-deploy.yaml ├── service/ │ ├── user-svc.yaml │ ├── product-svc.yaml │ ├── order-svc.yaml │ └── gateway-svc.yaml └── ingress.yaml
gateway-deploy.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: gateway spec: replicas: 2 selector: matchLabels: app: gateway template: metadata: labels: app: gateway spec: containers: - name: gateway image: nginx ports: - containerPort: 80
ingress.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: shop-ingress spec: rules: - host: shop.local http: paths: - path: / pathType: Prefix backend: service: name: gateway-svc port: number: 80
启动:
kubectl apply -f k8s/
访问:
http://shop.local
Kubernetes 将自动调度、负载均衡并监控所有微服务。
更多推荐
所有评论(0)