Linux下Kubernetes管理容器的核心流程與實踐
在Linux系統(如Ubuntu、CentOS)上使用Kubernetes管理容器前,需先安裝Docker(容器引擎)和Kubernetes核心組件(kubelet、kubeadm、kubectl)。
sudo apt install docker.io
),并啟動服務(sudo systemctl start docker
)。需配置Docker使用systemd
作為cgroup驅動(編輯/etc/docker/daemon.json
添加{"exec-opts": ["native.cgroupdriver=systemd"]}
),確保與Kubernetes兼容。kubelet
、kubeadm
、kubectl
(如Ubuntu使用sudo apt install -y kubelet kubeadm kubectl
),并啟用kubelet服務(sudo systemctl enable kubelet
)。Kubernetes通過集群架構管理容器,需完成Master節點初始化與Worker節點加入:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
(--pod-network-cidr
指定Pod網絡CIDR,需與后續網絡插件匹配),初始化完成后,將輸出的kubeadm join
命令保存(用于Worker節點加入)。mkdir -p $HOME/.kube
創建kubeconfig目錄,復制admin配置文件(sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
),并修改權限(sudo chown $(id -u):$(id -g) $HOME/.kube/config
),使kubectl能訪問集群。kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
)或Flannel(kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
),插件安裝后需等待網絡就緒。kubeadm join
命令(如sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>
),將節點加入集群。Kubernetes通過控制器(如Deployment、StatefulSet)和Pod(容器組)管理容器,以下是常用操作:
kubectl create deployment
命令創建Deployment(如kubectl create deployment nginx --image=nginx:latest
),Deployment會自動創建Pod并管理其生命周期。kubectl get
命令查看集群資源(如kubectl get nodes
查看節點、kubectl get pods
查看Pod、kubectl get deployments
查看Deployment)。kubectl scale
命令調整Deployment的副本數(如kubectl scale deployment nginx --replicas=3
),實現容器橫向擴展。kubectl set image
命令更新Deployment的鏡像(如kubectl set image deployment/nginx nginx=nginx:1.25
),觸發滾動更新(舊Pod逐步替換為新Pod)。kubectl expose
命令將Deployment暴露為Service(如kubectl expose deployment nginx --port=80 --type=LoadBalancer
),使應用可通過集群IP或外部IP訪問。apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
通過kubectl apply -f <filename>.yaml
命令應用配置,kubectl delete -f <filename>.yaml
刪除資源。resources.requests
(容器所需資源的最小保證)和resources.limits
(容器資源使用的最大限制)(如resources: {requests: {cpu: "500m", memory: "512Mi"}, limits: {cpu: "1", memory: "1Gi"}}
),避免資源濫用。kubectl create configmap nginx-config --from-file=nginx.conf
,在Deployment中掛載:volumes: [{name: nginx-config, configMap: {name: nginx-config}}]
。apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
該策略允許帶有app: frontend
標簽的Pod訪問帶有app: backend
標簽的Pod的8080端口。kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10
),當Pod CPU使用率超過50%時,自動增加副本數(最多10個)。kubectl get pods
查看Pod狀態(Running
表示運行中,Pending
表示正在調度,Error
表示出錯),kubectl describe pod <pod-name>
查看Pod詳情(如事件、日志)。kubectl delete pod <pod-name>
刪除Pod(若Pod由Deployment管理,刪除后會自動重建),或kubectl delete deployment <deployment-name>
刪除Deployment及關聯Pod。kubectl logs <pod-name>
查看Pod的容器日志(如kubectl logs nginx-pod-12345
),kubectl logs -f <pod-name>
實時查看日志。