Kubernetes 学习笔记
一份系统化的K8s学习笔记,涵盖核心概念、安装部署、常用命令及实战示例
一、什么是 Kubernetes?
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它由 Google 开源,现由 CNCF 维护。K8s 可以让你像管理一个“集群操作系统”一样管理你的容器化应用。
核心能力
- 服务发现与负载均衡:自动为容器分配 IP 和 DNS 名,并提供负载均衡。
- 存储编排:自动挂载本地或云存储。
- 自动部署与回滚:声明式更新,支持滚动更新和回滚。
- 自动打包:根据资源需求自动调度容器到合适节点。
- 自我修复:重启失败容器、替换节点、杀死不健康容器。
- 密钥与配置管理:管理敏感信息和配置,无需重新构建镜像。
二、核心概念
1. Pod
Pod 是 K8s 中最小的调度单元,一个 Pod 可以包含一个或多个容器(通常是一个)。Pod 内的容器共享网络栈和存储卷。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
2. Service
Service 为一组 Pod 提供稳定的网络访问入口,即使 Pod 发生变动,Service 的 IP 不变。常见类型有 ClusterIP、NodePort、LoadBalancer。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
3. Deployment
Deployment 是管理 Pod 的控制器,支持声明式更新、滚动更新、回滚。
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
image: nginx:1.14.2
ports:
- containerPort: 80
4. Namespace
命名空间用于在同一个物理集群中隔离资源,常用于多环境(dev、test、prod)或多租户场景。
三、安装与搭建
本地开发环境:Minikube
# 安装 Minikube(以 macOS 为例)
brew install minikube
# 启动集群
minikube start --driver=docker
# 验证
kubectl get nodes
生产级安装:kubeadm
# 初始化控制平面(Master)
kubeadm init --pod-network-cidr=10.244.0.0/16
# 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装网络插件(以 Flannel 为例)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 查看节点状态
kubectl get nodes
注意:生产集群需要至少 2 台机器(1 Master + N Worker)。
四、常用命令速查
# 查看所有资源
kubectl get pods -n <namespace>
kubectl get svc
kubectl get deploy
# 创建资源
kubectl apply -f deployment.yaml
# 删除资源
kubectl delete -f deployment.yaml
# 查看 Pod 日志
kubectl logs <pod-name>
# 进入 Pod 内
kubectl exec -it <pod-name> -- /bin/bash
# 查看集群信息
kubectl cluster-info
# 检查节点健康
kubectl describe node <node-name>
五、实战:部署一个 Nginx 应用
步骤1:编写 Deployment
创建文件 nginx-deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
步骤2:创建 Service
创建文件 nginx-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
步骤3:部署到集群
kubectl apply -f nginx-deploy.yaml
kubectl apply -f nginx-service.yaml
步骤4:验证
kubectl get pods -o wide
kubectl get svc
# 若使用 Minikube,运行 minikube service nginx-service 即可访问
六、总结
Kubernetes 学习曲线较陡,但一旦掌握核心概念和命令,就能高效管理容器化应用。建议按以下顺序学习:
- 理解 Pod、Service、Deployment 的关系
- 本地搭建 Minikube 练习
- 动手编写 YAML 并部署应用
- 学习 ConfigMap、Secret、Ingress、PV/PVC 等高级特性
- 研究 Helm、Operator 等生态工具
推荐资源:
- 官方文档
- 《Kubernetes in Action》
- kubectl Cheat Sheet
本文采用 CC BY-NC-SA 4.0协议进行许可,转载请注明出处。
