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>实时查看日志。