【部署】Kubernates

kubernetes,简称 K8s,是用 8 代替名字中间的 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful)。Kubernetes 提供了应用部署,规划,更新,维护的一种机制。

参考文档:https://baike.baidu.com/item/kubernetes

Kubernates 来源

Docker 像是一个小型的虚拟机,在软件层面提供虚拟化,屏蔽了操作系统以及硬件的实现。它将应用程序的代码、工具库和运行环境全部封装到了一个容器中,因此大大降低了测试和部署的难度。

简单的应用,直接使用 Docker 部署即可完成。但是如果需要部署的是架构复杂、规模庞大的应用,它们需要根据访问量自动分配服务器、网络资源,并且在某个容器宕机之后自动进行灾难恢复、故障转移,这个时候就需要用到 Kubernates 了。

简单来说,Kubernates 可以给 Docker 容器提供资源自动分配,做到灾难恢复、故障转移

Kubernates 概念

  • Node/节点:主机或者服务器;
  • Pod:Kubernates 中可以部署的最小执行单元,Pod 运行在 Node 上,是一个或多个 Container/容器的集合;
  • Control Plane/控制平面:协调管理 Pod 集合的 Central Computer/中心计算机;
  • Replica Set/副本集合:当 Kubernates 发现其中某一个 Pod 宕机之后,会启动备用 Pod 来替换掉其中宕机的 Pod,备份的 Pod 集合称为副本集合;
  • Cluster/集群:所有 Node 加上 Control Plane 一起被称为 Cluster 集群,Cluster 代表了 Kubernates 所管理的全部主机节点。

image.png

在这整个体系中,Control Plane 会通过一系列的 API 来监控节点的网络状态以平衡服务器的负载。

Kubernates 集群搭建

搭建 Kubernates 服务有两种方式:

  • 原生搭建:直接依赖官方提供的 Kubernates 软件包进行搭建;
  • 现有服务:依托现有成熟的方案进行集群搭建,主要是云服务商提供的现有方案。

image.png

除此之外,还可以使用 Minikube 这款免费开源的 Kubernates 集群部署工具。

image.png

Kubernates 搭建

参考文档:https://minikube.sigs.k8s.io/docs/start/

主要使用 Minikube 来完成 Kubernates 集群的部署工作。

工具:Visual Studio Code、Minikube

① 安装 VsCode 的 Kubernates 插件;

image.png

② 创建 deployment.yaml 文件,之后输入 deployment,编辑器即可自动给出基本的模版文件;

image.png

在 VsCode 中,可以看到任意属性的相关提示。

image.png

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: <Image>
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: <Port>

Kubernates 网络通信

默认情况下,一个 Pod 只能与同一集群下的其他 Pod 进行通信。如果需要将 Pod 中的应用端口暴露,需要用到 Kubernates 中的另一个组件——Services/服务。

image.png

在 Kubernates 中提供了最原始的 NodePort 服务,可以将 Pod 中的应用端口暴露给外网。在此之上,Kubernates 还提供 LoadBalancer 和 Ingress 来实现更加复杂的负载均衡服务。

③ 在 deployment.yaml 文件中,使用 --- 来进行文件的分隔。输入 Service 可以提示生成最基本服务添加模版。

image.png

此处可以使用 selector 来指定应当将数据转发到哪一个 Port 上;type 可以指定服务转发的类型;nodePort 可以指定暴露到外网的端口(可省略该参数让 Kubernates 自动分配)。

至此,deployment.yaml 编写完成。

Kubernates 部署

④ 安装 Minikube 工具:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

image.png

此时,如果安装了 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 命令查看版本。

image.png

⑤ 使用命令部署应用:

kubectl apply <deployment.yaml/部署文件路径名称>

⑥ 使用命令查看相关状态:

# 查看 Pod 的运行状态
kubectl get pods

# 查看所有的服务
kubectl get services

⑦ 访问集群:

minikube service <ApplicationName>

如果部署的是 Web 服务,正常情况下,会直接在浏览器中打开服务。

⑧ 动态更新:

如果想要更新 Kubernates 中的某些配置,可以在修改 yaml 文件之后,重新执行 kubectl apply <FileName> 命令来完成。这个时候就会直接完成静默更新。

官方文档:https://kubernetes.io/docs

参考资料:

【Kubernetes (k8s) 10分钟快速入门】 https://www.bilibili.com/video/BV1DL4y187cL/?share_source=copy_web&vd_source=6de80ff9f17ce8c00bfb41f8d5c0afef

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值