下面我用CentOS 上通过 YAML 部署 Kubernetes 应用的角度,给你一个从 0 到可用的示例讲解,适合新手。
确保你已经:
kubeadm init 并配置好 kubeconfigkubectl get nodes
能看到节点是 Ready 状态。
nginx.yamlapiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
kubectl apply -f nginx.yaml
kubectl get pods
kubectl get svc
curl http://<节点IP>:30080
| 字段 | 含义 |
|---|---|
| apiVersion | K8s API 版本 |
| kind | 资源类型 |
| metadata | 名称、标签 |
| spec | 期望状态 |
| status | 实际状态(自动) |
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: busybox
image: busybox
command: ["sleep", "3600"]
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.env: "prod"
echo -n "password" | base64
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
password: cGFzc3dvcmQ=
解决:
# 配置国内镜像
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://registry.aliyuncs.com"]
}
EOF
systemctl restart docker
检查:
firewall-cmd --add-port=30080/tcp --permanent
firewall-cmd --reload
kubectl describe pod <pod-name>
常见原因:
kubectl delete -f nginx.yaml
如果你愿意,可以告诉我:
我可以直接给你定制 YAML。