Kubernetes入门指南:从零到部署应用

Kubernetes入门指南:从零到部署应用

一、Kubernetes简介

1.1 什么是Kubernetes?

Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。

Kubernetes的核心功能:

  • 自动部署和扩展
  • 负载均衡
  • 自动修复
  • 存储编排
  • 服务发现
  • 配置管理

1.2 Kubernetes架构


┌─────────────────────────────────────────────────────┐
│              Kubernetes Cluster                       │
│                                                       │
│  ┌─────────────────────────────────────────────┐   │
│  │              Control Plane                    │   │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐  │   │
│  │  │  API    │  │ Scheduler│  │ Controller│  │   │
│  │  │ Server  │  │         │  │ Manager  │  │   │
│  │  └─────────┘  └─────────┘  └─────────┘  │   │
│  └─────────────────────────────────────────────┘   │
│                        │                             │
│  ┌─────────────────────────────────────────────┐   │
│  │              Data Plane (Nodes)              │   │
│  │  ┌─────────┐      ┌─────────┐             │   │
│  │  │  Node1  │      │  Node2  │             │   │
│  │  │ ┌─────┐ │      │ ┌─────┐ │             │   │
│  │  │ │ Pod1 │ │      │ │ Pod2 │ │             │   │
│  │  │ └─────┘ │      │ └─────┘ │             │   │
│  │  └─────────┘      └─────────┘             │   │
│  └─────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────┘

二、安装Kubernetes

2.1 使用kubeadm安装


# 所有节点执行

# 1. 安装kubeadm、kubelet、kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# 添加Kubernetes GPG密钥
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

# 添加Kubernetes仓库
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 更新并安装
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 验证安装
kubectl version --client
kubeadm version

2.2 初始化集群


# Master节点执行
sudo 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

# 查看集群状态
kubectl get nodes
kubectl get pods -n kube-system

2.3 安装网络插件


# 安装Flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# 或安装Calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

2.4 加入工作节点


# 在Worker节点执行
sudo kubeadm join :6443 --token  \
  --discovery-token-ca-cert-hash sha256:

三、Kubernetes核心概念

3.1 Pod

Pod是Kubernetes中最小的可部署单元:


apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80

3.2 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.21
        ports:
        - containerPort: 80

3.3 Service

Service为Pod提供稳定的网络访问:


apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

3.4 Ingress

Ingress提供HTTP和HTTPS路由:


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80

四、基本命令

4.1 Pod管理


# 查看Pod
kubectl get pods
kubectl get pods -o wide
kubectl describe pod 

# 查看日志
kubectl logs 
kubectl logs -f 

# 进入Pod
kubectl exec -it  -- /bin/bash

# 删除Pod
kubectl delete pod 

4.2 Deployment管理


# 查看Deployment
kubectl get deployments
kubectl describe deployment 

# 扩缩容
kubectl scale deployment nginx-deployment --replicas=5

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

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

# 回滚
kubectl rollout undo deployment/nginx-deployment

4.3 Service管理


# 查看Service
kubectl get services
kubectl describe service 

# 查看endpoint
kubectl get endpoints 

4.4 资源状态


# 查看所有资源
kubectl get all

# 查看节点资源
kubectl top nodes

# 查看Pod资源
kubectl top pods

# 查看资源使用
kubectl describe node 

五、配置文件示例

5.1 完整应用示例


apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_URL: "mysql://db:3306"
  REDIS_URL: "redis://redis:6379"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest
        ports:
        - containerPort: 8080
        envFrom:
        - configMapRef:
            name: app-config
        resources:
          requests:
            memory: "128Mi"
            cpu: "250m"
          limits:
            memory: "256Mi"
            cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

六、常见问题解决

6.1 Pod无法启动


# 1. 检查Pod状态
kubectl describe pod 

# 2. 查看事件
kubectl get events --sort-by='.metadata.creationTimestamp'

# 3. 常见原因:
# - 镜像拉取失败
# - 资源不足
# - 配置错误

6.2 Service不可用


# 1. 检查Service状态
kubectl describe service 

# 2. 检查Endpoint
kubectl get endpoints 

# 3. 检查Pod Selector匹配
kubectl get pods --selector=app=myapp

6.3 网络问题


# 检查网络插件状态
kubectl get pods -n kube-system

# 检查节点状态
kubectl get nodes
kubectl describe node 

# 检查网络连通性
kubectl exec -it  -- curl 

七、总结

本文介绍了Kubernetes的基本概念和入门操作。

核心要点:

下一步学习:

  • ConfigMap和Secret
  • PersistentVolume
  • StatefulSet
  • Helm包管理器
  • Kubernetes Dashboard

发表回复

后才能评论