引言

Kubernetes(简称K8s)是当前最流行的容器编排工具之一,它可以帮助开发者和管理员轻松地部署、扩展和管理容器化应用程序。本文将为您提供一份全面的学习指南,从Kubernetes的基础概念开始,逐步深入到实战应用,帮助您掌握这一强大的容器编排技术。

第一部分:Kubernetes基础知识

1.1 容器和容器化

容器概述

容器是一种轻量级的、可执行的软件包,它包含应用程序及其所有依赖项,可以在任何支持容器的环境中运行。

容器化优势

  • 隔离性:容器可以隔离应用程序及其依赖项,避免环境冲突。
  • 轻量级:容器不需要完整的操作系统,因此启动速度快,资源占用少。
  • 可移植性:容器可以在任何支持Docker的环境中运行。

1.2 Kubernetes概述

Kubernetes定义

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

Kubernetes核心概念

  • Pod:Kubernetes的最小部署单位,包含一个或多个容器。
  • Node:Kubernetes集群中的工作节点,负责运行Pod。
  • Master:Kubernetes集群的控制节点,负责集群的管理和调度。
  • Service:Kubernetes中的服务发现和负载均衡机制。
  • ReplicationController/ReplicaSet:确保Pod副本的数量符合期望值。
  • Deployment:用于部署和管理Pod的控制器。

第二部分:Kubernetes环境搭建

2.1 环境要求

  • 操作系统:Linux(推荐使用Ubuntu 16.04或CentOS 7)
  • 虚拟化软件:VirtualBox或Docker Machine
  • 软件包管理器:apt-get或yum

2.2 安装Docker

# 对于Ubuntu
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

# 对于CentOS
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动并设置Docker开机自启
sudo systemctl start docker
sudo systemctl enable docker

2.3 安装Kubernetes

# 对于Ubuntu
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo systemctl start kubelet
sudo systemctl enable kubelet

# 对于CentOS
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y kubelet kubeadm kubectl
sudo systemctl start kubelet
sudo systemctl enable kubelet

2.4 验证安装

# 对于Ubuntu
kubectl version --client --short --output json

# 对于CentOS
kubectl version --client --short --output json

第三部分:Kubernetes核心概念实战

3.1 创建Pod

创建Pod的YAML文件

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx

创建Pod

kubectl apply -f my-pod.yaml

查看Pod状态

kubectl get pods

3.2 创建Service

创建Service的YAML文件

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-pod
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

创建Service

kubectl apply -f my-service.yaml

查看Service状态

kubectl get services

3.3 创建Deployment

创建Deployment的YAML文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-pod
  template:
    metadata:
      labels:
        app: my-pod
    spec:
      containers:
      - name: my-container
        image: nginx

创建Deployment

kubectl apply -f my-deployment.yaml

查看Deployment状态

kubectl get deployments

第四部分:Kubernetes进阶学习

4.1 高可用集群

安装高可用组件

  • Keepalived
  • HAProxy
  • Calico

配置高可用集群

  1. 配置Keepalived和HAProxy
  2. 配置Calico网络
  3. 配置Kubernetes Master节点

4.2 StatefulSet

StatefulSet概述

StatefulSet是Kubernetes中用于管理有状态容器的控制器,它确保Pod的持久性和有序部署。

创建StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset
spec:
  serviceName: "my-service"
  replicas: 3
  selector:
    matchLabels:
      app: my-pod
  template:
    metadata:
      labels:
        app: my-pod
    spec:
      containers:
      - name: my-container
        image: nginx

创建StatefulSet

kubectl apply -f my-statefulset.yaml

查看StatefulSet状态

kubectl get statefulsets

第五部分:Kubernetes实战案例

5.1 实战案例:部署一个简单的Web应用

步骤

  1. 创建一个简单的Nginx Web应用
  2. 部署到Kubernetes集群
  3. 访问Web应用

5.2 实战案例:部署一个高可用数据库

步骤

  1. 部署MySQL数据库
  2. 部署Keepalived和HAProxy
  3. 配置数据库主从复制
  4. 部署高可用数据库

总结

通过本文的学习,您应该已经掌握了Kubernetes的基本概念、环境搭建、核心概念实战、进阶学习和实战案例。希望这份指南能够帮助您在Kubernetes的学习道路上取得更大的进步。