Kubernetes (k8s)

发布于:2025-09-07 ⋅ 阅读:(22) ⋅ 点赞:(0)

Kubernetes (k8s)

以下是一份 ​Kubernetes (k8s) 基础使用教程,涵盖从环境搭建到核心操作的完整流程,附详细命令和示例:

🚀 ​一、环境准备(3种方式)​​
​1. 本地开发环境(推荐)​​

安装 Minikube(单节点集群)

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

启动集群(需提前安装 Docker)

minikube start --driver=docker

验证

kubectl get nodes # 应显示一个节点状态 Ready
​2. 生产环境​

  • ​云服务​:使用托管K8s服务# AWS EKS
    eksctl create cluster --name my-cluster --region us-east-1

Google GKE

gcloud container clusters create my-cluster
​3. 学习环境​

  • Play with Kubernetes(免费在线沙盒)

⚙️ ​二、核心概念与操作​
​1. 部署第一个应用​

运行Nginx容器

kubectl create deployment nginx-app --image=nginx:1.25

查看Pod(容器组)

kubectl get pods -w # -w 实时监控状态变化
​输出示例​:
NAME READY STATUS RESTARTS AGE
nginx-app-5d96f8d7b6-2k9jf 1/1 Running 0 25s
​2. 暴露服务​

创建Service(负载均衡)

kubectl expose deployment nginx-app --port=80 --type=NodePort

获取访问地址

minikube service nginx-app --url # 本地环境

输出:http://192.168.49.2:32456

浏览器打开URL应看到Nginx欢迎页
​3. 扩缩容​

扩容到3个副本

kubectl scale deployment nginx-app --replicas=3

查看Pod分布

kubectl get pods -o wide
​输出​:
nginx-app-5d96f8b7b6-2k9jf 1/1 Running 0 2m node1
nginx-app-5d96f8b7b6-8x7pd 1/1 Running 0 10s node2
nginx-app-5d96f8b7b6-qw4k9 1/1 Running 0 10s node1

📁 ​三、YAML声明式管理​
​1. 部署文件示例​
deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
limits:
memory: “128Mi”
cpu: “500m”

apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
​2. 应用配置​

创建资源

kubectl apply -f deploy.yaml

更新配置(修改文件后重新运行)

kubectl apply -f deploy.yaml

删除资源

kubectl delete -f deploy.yaml

🔍 ​四、日常运维命令​
​1. 查看资源​
kubectl get pods # 查看Pod
kubectl get svc # 查看Service
kubectl get deployments # 查看部署
kubectl describe pod <pod名> # 查看Pod详情
​2. 调试与日志​

进入Pod的Shell

kubectl exec -it <pod名> – /bin/bash

查看日志

kubectl logs <pod名> -f # -f 实时跟踪日志

端口转发(访问内部服务)

kubectl port-forward svc/web-service 8080:80
浏览器访问 http://localhost:8080
​3. 故障排查​

查看事件(定位启动失败原因)

kubectl get events --sort-by=.metadata.creationTimestamp

查看节点状态

kubectl top nodes # 需安装Metrics Server

🛠️ ​五、进阶操作​
​1. 配置管理​

创建ConfigMap

kubectl create configmap my-config
–from-literal=LOG_LEVEL=debug
–from-file=config.properties

Pod中挂载

spec:
containers:
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: my-config
key: LOG_LEVEL
volumeMounts:
- name: config-vol
mountPath: /etc/config
volumes:
- name: config-vol
configMap:
name: my-config
​2. 存储卷​

持久卷声明 (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi

Pod挂载

spec:
containers:
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:

  • name: data
    persistentVolumeClaim:
    claimName: mysql-pvc

🚨 ​六、常见问题解决​
​1. Pod卡在Pending状态​

查看原因

kubectl describe pod <pod名> | grep Events -A20

常见原因:

- 资源不足(CPU/内存)

- 没有可用节点(节点NotReady)

​2. 服务无法访问​

检查Service选择器是否匹配Pod标签

kubectl describe svc <service名>

验证网络策略

kubectl get networkpolicy

📚 ​七、学习资源​
1.​官方文档​:kubernetes.io/docs
2.​交互式教程​:Katacoda Kubernetes
3.​命令备忘单​:kubectl Cheat Sheet

✅ ​快速总结表​
​操作​​命令​部署应用kubectl create deploy <名> --image=<镜像>暴露服务kubectl expose deploy <名> --port=<端口>查看Podkubectl get pods -w进入容器kubectl exec -it <pod名> -- bash查看日志kubectl logs <pod名> -f扩缩容kubectl scale deploy/<名> --replicas=N应用YAMLkubectl apply -f file.yaml删除资源kubectl delete -f file.yaml

​提示​:生产环境务必配置:

  • 资源限制(CPU/内存)
  • 就绪探针(Readiness Probe)
  • 存活探针(Liveness Probe)
  • HPA(自动扩缩容)
    掌握以上基础操作后,可进一步学习Ingress、Helm、Operator等高级功能!

网站公告

今日签到

点亮在社区的每一天
去签到