Kubernetes(简称 K8s)是由 Google 于 2014 年开源的容器编排平台,是云原生计算基金会(CNCF)的核心项目。Kubernetes 的名字来源于希腊语,意为"舵手"或"飞行员"。K8s 中的 8 代表 "ubernete" 的 8 个字母。
Kubernetes 的核心定位是 容器化应用的自动化管理平台。它提供了:
# 查看集群
kubectl version
kubectl cluster-info
# 查看节点
kubectl get nodes
kubectl describe node node1
# 查看资源
kubectl get pods
kubectl get pods -A # 所有命名空间
kubectl get deployments
kubectl get services
kubectl get ingress
kubectl get configmaps
kubectl get secrets
kubectl get all # 所有资源
# 创建资源
kubectl create deployment nginx --image=nginx
kubectl create -f deployment.yaml
kubectl apply -f deployment.yaml # 声明式(推荐)
# 删除资源
kubectl delete pod nginx-xxx
kubectl delete -f deployment.yaml
kubectl delete deployment nginx
# 查看日志
kubectl logs pod_name
kubectl logs -f pod_name # 实时日志
kubectl logs pod_name -c container_name
# 进入容器
kubectl exec -it pod_name -- /bin/bash
kubectl exec -it pod_name -c container_name -- /bin/bash
# 端口转发
kubectl port-forward pod_name 8080:80
# 标签操作
kubectl label pods nginx app=web
kubectl get pods -l app=web
# 命名空间
kubectl create namespace dev
kubectl get pods -n dev
kubectl config set-context --current --namespace=dev
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
env:
- name: ENV
value: "production"
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP # ClusterIP / NodePort / LoadBalancer
---
# NodePort 示例
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
type: NodePort
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
tls:
- hosts:
- myapp.example.com
secretName: tls-secret
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.properties: |
ENV=production
LOG_LEVEL=info
settings.json: |
{"debug": false, "timeout": 30}
# 在 Pod 中使用
envFrom:
- configMapRef:
name: app-config
# volume 挂载
volumes:
- name: config
configMap:
name: app-config
# hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
# 更新镜像
kubectl set image deployment/nginx nginx=nginx:1.22
# 查看更新状态
kubectl rollout status deployment/nginx
# 查看历史
kubectl rollout history deployment/nginx
# 回滚到上一版本
kubectl rollout undo deployment/nginx
# 回滚到特定版本
kubectl rollout undo deployment/nginx --to-revision=2
# 暂停更新
kubectl rollout pause deployment/nginx
# 恢复更新
kubectl rollout resume deployment/nginx
Docker 容器化、Linux 基础、YAML 语法
K8s 架构、核心概念(Pod/Deployment/Service)、kubectl 命令
ConfigMap/Secret、Ingress、PV/PVC、HPA 弹性伸缩
Helm(包管理)、Istio(服务网格)、Operator(自动化运维)
Kubernetes 是云原生时代的"操作系统"。
它用 声明式配置、自动化管理、弹性伸缩 重新定义了应用部署的方式。Kubernetes 是 DevOps 工程师的必修课,也是云原生技术的核心平台。
掌握 Kubernetes,意味着你能 管理大规模容器集群、实现高可用部署、构建弹性架构。
"Kubernetes 是未来十年应用平台的标准。" 🚀
—— 技术社区评价