kubernetes,简称 K8s,是用 8 代替名字中间的 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful)。Kubernetes 提供了应用部署,规划,更新,维护的一种机制。
参考文档:https://baike.baidu.com/item/kubernetes
Docker 像是一个小型的虚拟机,在软件层面提供虚拟化,屏蔽了操作系统以及硬件的实现。它将应用程序的代码、工具库和运行环境全部封装到了一个容器中,因此大大降低了测试和部署的难度。
简单的应用,直接使用 Docker 部署即可完成。但是如果需要部署的是架构复杂、规模庞大的应用,它们需要根据访问量自动分配服务器、网络资源,并且在某个容器宕机之后自动进行灾难恢复、故障转移,这个时候就需要用到 Kubernates 了。
简单来说,Kubernates 可以给 Docker 容器提供资源自动分配,做到灾难恢复、故障转移。
在这整个体系中,Control Plane 会通过一系列的 API 来监控节点的网络状态以平衡服务器的负载。
搭建 Kubernates 服务有两种方式:
除此之外,还可以使用 Minikube 这款免费开源的 Kubernates 集群部署工具。
参考文档:https://minikube.sigs.k8s.io/docs/start/
主要使用 Minikube 来完成 Kubernates 集群的部署工作。
工具:Visual Studio Code、Minikube
① 安装 VsCode 的 Kubernates 插件;
② 创建 deployment.yaml 文件,之后输入 deployment,编辑器即可自动给出基本的模版文件;
在 VsCode 中,可以看到任意属性的相关提示。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: >
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: >
默认情况下,一个 Pod 只能与同一集群下的其他 Pod 进行通信。如果需要将 Pod 中的应用端口暴露,需要用到 Kubernates 中的另一个组件——Services/服务。
在 Kubernates 中提供了最原始的 NodePort 服务,可以将 Pod 中的应用端口暴露给外网。在此之上,Kubernates 还提供 LoadBalancer 和 Ingress 来实现更加复杂的负载均衡服务。
③ 在 deployment.yaml 文件中,使用 ---
来进行文件的分隔。输入 Service
可以提示生成最基本服务添加模版。
此处可以使用 selector
来指定应当将数据转发到哪一个 Port 上;type 可以指定服务转发的类型;nodePort 可以指定暴露到外网的端口(可省略该参数让 Kubernates 自动分配)。
至此,deployment.yaml 编写完成。
④ 安装 Minikube 工具:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
此时,如果安装了 Docker,则不需要安装 kubectl 工具,否则需要额外安装该工具。安装最新稳定版的命令:
# 下载最新版本的命令
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 二进制校验
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
# 安装 kubectl 工具
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
安装地址:https://kubernetes.io/docs/tasks/tools/
是否安装成功,使用 kubectl version
命令查看版本。
⑤ 使用命令部署应用:
kubectl apply <deployment.yaml/部署文件路径名称>
⑥ 使用命令查看相关状态:
# 查看 Pod 的运行状态
kubectl get pods
# 查看所有的服务
kubectl get services
⑦ 访问集群:
minikube service <ApplicationName>
如果部署的是 Web 服务,正常情况下,会直接在浏览器中打开服务。
⑧ 动态更新:
如果想要更新 Kubernates 中的某些配置,可以在修改 yaml 文件之后,重新执行 kubectl apply
命令来完成。这个时候就会直接完成静默更新。
官方文档:https://kubernetes.io/docs
参考资料:
【Kubernetes (k8s) 10分钟快速入门】 https://www.bilibili.com/video/BV1DL4y187cL/?share_source=copy_web&vd_source=6de80ff9f17ce8c00bfb41f8d5c0afef