介绍Kubernetes的工作原理以及如何开始使用Kubernetes

117 阅读5分钟

本指南将向你介绍Kubernetes的工作原理以及如何开始使用Kubernetes。

什么是Kubernetes?

Kubernetes或k8s是一个免费的、开源的平台,用于管理容器化应用环境和服务。Kubernetes允许你创建可移植和高度可扩展的容器化应用,易于部署和管理。 它通常与Docker一起使用,以发展对容器化应用和服务的更好控制。

Kubernetes的特点

以下是Kubernetes提供的基本功能。

  1. 在发生错误时自动推出和回滚。
  2. 可自动扩展的基础设施。
  3. 横向扩展
  4. 负载平衡器
  5. 自动健康检查和自我修复能力。
  6. 高度可预测的基础设施
  7. 挂载和存储系统来运行应用程序
  8. 高效的资源使用
  9. 每个Kubernetes单元之间松散地联系在一起,每个单元都可以作为一个独立的组件。
  10. 自动管理安全、网络和网络组件。

Kubernetes架构

了解Kubernetes架构将有助于你更深入地了解如何与Kubernetes合作。

以下是Kubernetes架构的硬件组件。

节点是Kubernetes集群中单个机器的代表。节点代表一台工作机,可以是虚拟机或物理硬件。

Kubernetes中的每个节点包括各种Kubernetes软件组件,如Pods、Kubulet、kube-proxy和容器运行时间,如Docker。

一个Pod指的是一个或多个捆绑在一起的容器化应用。Kubernetes管理各自的pod,而不是容器,如果其中一个发生故障,则创建副本。吊舱提供共享资源,如网络接口和存储设备。

容器/容器运行时间

容器是一个隔离的、独立的软件包。容器包含运行一个应用程序所需的一切,包括代码、系统库和其他依赖性。一旦容器被部署,你就不能改变代码,因为它们是不可变的。默认情况下,Kubernetes容器运行时间是由Docker提供的。

Kubelet

Kubelet是一个简单的应用程序,允许节点和主节点之间的通信。它负责管理pod和容器。主节点使用kubectl来对特定的节点执行必要的操作。

Kube-Proxy

kube-proxy是一个网络代理,在所有Kubernetes节点中都可用。它管理集群内部和外部的网络通信。

集群

集群是一个Kubernetes节点的集合,它聚集了它们的资源以创建一个强大的机器。Kubernetes节点共享的资源包括内存、CPU和磁盘。

一个Kubernetes集群是由一个主节点和其他从节点组成的。主节点控制Kubernetes集群,包括调度和扩展应用程序,推送和应用更新,并管理集群状态。

持久卷

持久卷用于在Kubernetes集群中存储数据。持久卷是由集群节点的各种卷组成的。一旦集群中的一个节点被移除或添加,主节点会有效地分配工作。

采集器

Kubernetes Ingress是一个API对象,允许在集群外访问Kubernetes服务。Ingress通常使用HTTP/HTTPS协议来暴露服务。一个Ingress是通过一个Ingress控制器或一个负载平衡器来实现集群的。

主站

主控器,也被称为控制平面,是指Kubernetes架构的中央控制组件。它负责管理工作负载和集群及其成员之间的通信接口。

主站由各种组件组成。 这些组件包括

  1. 控制管理器
  2. 调度器
  3. API服务器
  4. ETCD

控制管理器

控制管理器或kube-control-manager负责运行和管理集群。控制管理程序收集关于集群的信息,并将它们报告给API服务器。

调度器

kube-scheduler或简称调度器负责工作负载的分配。它执行的功能包括确定集群是否健康、创建容器等。

它跟踪资源,如内存和CPU,并将pod调度到适当的计算节点。

API服务器

kube-apiserver是Kubernetes主机的前端接口。它允许你与Kubernetes集群对话。一旦API服务器收到一个请求,它就会确定该请求是否有效,如果是的话就进行处理。

为了与API服务器互动,你需要通过命令行控制工具(如kubectl或kubeadm)使用REST调用。

ETCD

ETCD是一个键值数据库,负责存储配置数据和有关Kubernetes集群状态的信息。它接收来自其他集群组件的命令并执行必要的操作。

运行Kubernetes

本节涉及如何开始使用Kubernetes。本插图在Debian系统上测试。

启动终端并更新你的系统。

sudo apt-get update

sudo apt-get upgrade

接下来,安装各种需求,如下面的命令所示。

sudo apt-get install curl gnupg ca-certificates apt-transport-https

安装Docker

接下来,我们需要安装Docker,因为Kubernetes将使用它作为容器运行时间。下面的说明是针对Debian操作系统的。了解如何在你的系统上安装Docker

添加Docker官方GPG密钥。

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo
gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

接下来,将Docker存储库设置为命令中所示的来源。

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

接下来,更新并安装Docker。

sudo apt-get update && sudo apt-get install docker-ce containerd.io docker-ce-cli

最后,启动并启用Docker服务

sudo systemctl enable docker.service
sudo systemctl start docker.service

安装Kubernetes

接下来,我们需要在系统上安装Kubernetes。同样,本指南中的说明也是在Debian系统上测试的。

首先,下载谷歌云签名密钥。

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

接下来,添加Kubernetes仓库。

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

最后,更新并安装Kubernetes组件

sudo apt-get install kubectl kubelet kubeadm kubernetes kubernetes-cni

初始化Kubernetes主节点

下一步是启动Kubernetes主节点。在这之前,建议先关闭掉期。

要做到这一点,使用以下命令。

sudo swapoff –a

一旦你关闭了交换,用命令初始化主节点。

sudo kubeadm init

一旦命令执行成功,你应该得到三个命令。

复制并运行这些命令。

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

部署Pod网络

下一步是部署一个Pod网络。在本指南中,我们将使用[AWS VPC CNI for Kubernetes]

使用的命令为。

sudo kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.8.0/config/v1.8/aws-k8s-cni.yaml

完成后,通过运行命令确保集群已经启动并运行。

sudo kubectl cluster-info

如果你得到如图所示的输出,那就最好了。

Kubernetes control plane is running at https://192.168.43.29:6443
CoreDNS is running at https://192.168.43.29:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

要显示所有正在运行的节点,请使用以下命令。

sudo kubectl get nodes

部署一个应用程序

让我们部署一个MySQL应用程序,并在3306端口暴露服务。使用如图所示的命令。

sudo kubectl apply -f https://k8s.io/examples/application/mysql/mysql-deployment.yaml
sudo kubectl expose deployment mysql --port=3306 --name=mysql-server

要显示部署的列表,使用命令。

kubectl get deployments

要获得关于pod的信息,使用命令。

sudo kubectl describe pods

总结

Kubernetes是一个强大的容器部署和管理工具。本教程只涉及到Kubernetes的表面和它的功能。