Kubernetes入门教程

1. 什么是Kubernetes?

Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由Google设计,现在由云原生计算基金会(CNCF)维护。Kubernetes的主要功能包括:

自动化容器部署和复制

容器间的负载均衡

存储管理

服务发现和路由

自动扩缩容

滚动更新和回滚

2. 准备工作

安装kubectl(Kubernetes命令行工具)

# 在macOS上使用Homebrew安装
brew install kubectl

# 在Windows上使用Chocolatey安装
choco install kubernetes-cli

# 验证安装
kubectl version --client

安装Minikube(本地Kubernetes环境)

# 安装Minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/

# 启动Minikube集群
minikube start

安装Docker(容器运行时)

# 在Ubuntu上安装Docker
sudo apt update
sudo apt install -y docker.io
sudo usermod -aG docker $USER

# 验证Docker安装
docker --version

3. 核心概念

**Pod**:Kubernetes中最小的部署单元,包含一个或多个容器

**Deployment**:管理Pod的部署和更新

**Service**:为一组Pod提供统一的访问入口

**Namespace**:将集群资源划分为多个虚拟集群

**ConfigMap & Secret**:管理应用配置和敏感数据

4. 创建第一个应用

创建Pod

# pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container
    image: nginx:1.21
    ports:
    - containerPort: 80
# 创建Pod
kubectl apply -f pod.yaml

# 查看Pod状态
kubectl get pods

创建Deployment

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80
# 创建Deployment
kubectl apply -f deployment.yaml

# 查看Deployment和Pod
kubectl get deployment
kubectl get pods -l app=nginx

5. 暴露服务

创建Service

# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort
# 创建Service
kubectl apply -f service.yaml

# 获取服务访问地址
minikube service nginx-service --url

6. 扩缩容应用

# 扩容到5个副本
kubectl scale deployment nginx-deployment --replicas=5

# 查看扩容结果
kubectl get pods -l app=nginx

# 缩容到2个副本
kubectl scale deployment nginx-deployment --replicas=2

7. 滚动更新

# 更新镜像版本
kubectl set image deployment/nginx-deployment nginx=nginx:1.22

# 查看更新状态
kubectl rollout status deployment/nginx-deployment

# 查看更新历史
kubectl rollout history deployment/nginx-deployment

# 回滚到上一个版本
kubectl rollout undo deployment/nginx-deployment

8. 配置管理

创建ConfigMap

# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_COLOR: "blue"
  APP_MODE: "production"

在Pod中使用ConfigMap

# pod-with-configmap.yaml
apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
  - name: myapp
    image: busybox
    command: ["sh", "-c", "echo $APP_COLOR && sleep 3600"]
    env:
      - name: APP_COLOR
        valueFrom:
          configMapKeyRef:
            name: app-config
            key: APP_COLOR
# 创建ConfigMap和Pod
kubectl apply -f configmap.yaml
kubectl apply -f pod-with-configmap.yaml

9. 使用Secret管理敏感数据

# 创建Secret
kubectl create secret generic db-secret --from-literal=password='mysecretpassword'

# secret-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
  - name: myapp
    image: busybox
    command: ["sh", "-c", "echo $DB_PASSWORD && sleep 3600"]
    env:
      - name: DB_PASSWORD
        valueFrom:
          secretKeyRef:
            name: db-secret
            key: password
# 创建Pod
kubectl apply -f secret-pod.yaml

10. 常用调试命令

# 查看Pod详细信息
kubectl describe pod <pod-name>

# 查看Pod日志
kubectl logs <pod-name>

# 在Pod中执行命令
kubectl exec -it <pod-name> -- /bin/bash

# 查看集群事件
kubectl get events

# 删除资源
kubectl delete -f <file.yaml>

11. 总结

Kubernetes是一个强大的容器编排平台,通过本教程,我们学习了:

Kubernetes的核心概念(Pod、Deployment、Service等)

如何创建和管理容器化应用

应用的扩缩容和滚动更新

使用ConfigMap和Secret管理配置

常用的调试和故障排除命令

Kubernetes的学习曲线较陡峭,但掌握它能极大提升应用部署和管理的效率。建议继续深入学习Kubernetes的高级特性如Ingress、PersistentVolume、StatefulSet等,并探索云原生生态系统中的其他工具如Helm、Prometheus等。持续实践是掌握Kubernetes的关键,可以尝试将更多应用部署到Kubernetes环境中,逐步积累经验。

发表回复

后才能评论