第一部分:Kubernetes基础知识

1.1 什么是Kubernetes?

Kubernetes是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它允许你以声明性的方式定义和运行容器化应用程序,并提供一个平台来管理这些应用程序的整个生命周期。

1.2 Kubernetes的核心概念

  • Pod:Kubernetes的最小部署单元,一组关联的容器。
  • Node:运行Kubernetes工作的机器,可以是物理机或虚拟机。
  • Master:Kubernetes集群的中央控制节点,负责集群的运行和管理。
  • ReplicationController:确保指定数量的Pod副本始终运行。
  • Service:定义了一组Pod的访问方式,允许外部访问集群中的服务。
  • Deployment:管理Pod、ReplicaSet和Service等资源的自动化部署方式。

第二部分:Kubernetes环境搭建

2.1 环境要求

  • 操作系统:Ubuntu 18.04、CentOS 7等。
  • Docker:Docker Engine 17.03及以上版本。
  • Kubernetes命令行工具:kubeadm、kubectl、kubelet等。

2.2 安装Kubernetes

2.2.1 下载并安装kubeadm

# 下载kubeadm
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubeadm"
# 添加执行权限
chmod +x kubeadm
# 将kubeadm移动到PATH
sudo mv ./kubeadm /usr/local/bin/kubeadm

2.2.2 下载并安装kubectl

# 下载kubectl
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
# 添加执行权限
chmod +x kubectl
# 将kubectl移动到PATH
sudo mv ./kubectl /usr/local/bin/kubectl

2.2.3 下载并安装kubelet

# 下载kubelet
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubelet"
# 添加执行权限
chmod +x kubelet
# 将kubelet移动到PATH
sudo mv ./kubelet /usr/local/bin/kubelet

2.2.4 初始化Master节点

sudo kubeadm init

2.2.5 配置kubectl

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.2.6 部署工作节点

sudo kubeadm join <Master-IP>:6443 --token <Token> --discovery-token-ca-cert-hash sha256:<Cert-Hash>

第三部分:Kubernetes实战案例

3.1 部署Nginx应用

3.1.1 创建Deployment

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

3.1.2 应用配置

kubectl apply -f nginx-deployment.yaml

3.1.3 查看应用状态

kubectl get pods

3.2 暴露服务

3.2.1 创建Service

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

3.2.2 应用配置

kubectl apply -f nginx-service.yaml

3.2.3 查看服务信息

kubectl get svc

3.3 扩展应用

3.3.1 修改Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  ...

3.3.2 应用配置

kubectl apply -f nginx-deployment.yaml

3.3.3 查看Pod状态

kubectl get pods

第四部分:Kubernetes进阶技巧

4.1 命名空间(Namespace)

命名空间用于隔离资源,可以创建多个命名空间来区分不同的用户或项目。

kubectl create namespace my-namespace

4.2 资源配额(ResourceQuota)

资源配额用于限制命名空间中的资源使用量,例如CPU、内存等。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: my-namespace-quota
spec:
  hard:
    requests.cpu: "1"
    limits.cpu: "2"
    memory: 200Mi

4.3 自定义资源(Custom Resource)

自定义资源允许你扩展Kubernetes API,创建新的资源类型。

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myresources.mydomain.com
spec:
  group: mydomain.com
  versions:
    - name: v1
      served: true
      storage: true
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource
    shortNames:
      - myr

第五部分:Kubernetes资源管理

5.1 Pod

Pod是Kubernetes中最基本的部署单元,包含一组容器。Pod的状态包括:

  • Running:Pod正在运行。
  • Pending:Pod正在等待调度。
  • Failed:Pod运行失败。

5.2 Deployment

Deployment用于自动化Pod的部署、扩展和管理。Deployment的状态包括:

  • Available:部署的Pod副本可用。
  • Deploying:部署正在进行。
  • Failed:部署失败。

5.3 Service

Service用于将Pod暴露给外部访问。Service的状态包括:

  • LoadBalancer:Service使用外部负载均衡器。
  • ClusterIP:Service使用集群内部IP。
  • NodePort:Service使用节点的指定端口。

总结

本文从Kubernetes基础知识、环境搭建、实战案例、进阶技巧和资源管理等方面,详细介绍了Kubernetes容器编排实战学习指南。希望本文能帮助读者快速入门Kubernetes,并在实际项目中运用所学知识。