在 CentOS 上用 Kubernetes(k8s)管理容器,核心思路是:
k8s 不直接“管理容器”,而是通过 Pod → 控制器 → 集群调度 来管理。
下面按 从概念到实操 给你一个清晰说明。
在 CentOS 上,常见组合是:
CentOS
└── Docker / containerd(容器运行时)
└── Kubernetes(kubelet、kubeadm、kubectl)
└── Pod(容器)
✅ k8s 不关心你用的是什么容器,只关心 Pod
systemctl disable firewalld
systemctl stop firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
yum install -y containerd
systemctl enable --now containerd
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
kubeadm init \
--pod-network-cidr=10.244.0.0/16
执行完成后:
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.25
创建:
kubectl apply -f pod.yaml
查看:
kubectl get pods
kubectl describe pod nginx-pod
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
kubectl apply -f deployment.yaml
kubectl get pods
✅ 自动完成:
kubectl scale deployment nginx-deploy --replicas=5
kubectl set image deployment/nginx-deploy nginx=nginx:1.26
kubectl logs pod-name
kubectl logs -f pod-name
kubectl exec -it pod-name -- /bin/bash
| 对比项 | Docker | Kubernetes |
|---|---|---|
| 管理对象 | 容器 | Pod |
| 自动重启 | 有限 | 自动 |
| 扩缩容 | 手动 | 自动 |
| 高可用 | 无 | 有 |
| 适合 | 单机 | 集群 |
kubectl get nodes
kubectl get pods -A
kubectl get deployment
kubectl delete pod pod-name
kubectl describe pod pod-name
你可以告诉我:
我可以:
你现在是 刚接触 k8s,还是已经在用但遇到问题?