Kubernetes 学习笔记

一份系统化的K8s学习笔记,涵盖核心概念、安装部署、常用命令及实战示例

发布于 作者 Shifenmiao更新于 技术0

一、什么是 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 学习曲线较陡,但一旦掌握核心概念和命令,就能高效管理容器化应用。建议按以下顺序学习:

  1. 理解 Pod、Service、Deployment 的关系
  2. 本地搭建 Minikube 练习
  3. 动手编写 YAML 并部署应用
  4. 学习 ConfigMap、Secret、Ingress、PV/PVC 等高级特性
  5. 研究 Helm、Operator 等生态工具

推荐资源:

本文采用 CC BY-NC-SA 4.0协议进行许可,转载请注明出处。

评论0 条评论

还没有评论,来抢沙发。

发表评论

选填,不会公开

最多 1000 字