Day12 - Google Kubernetes Engine 基础 - Pod 建置

前言

前一天我们建立好了 Kubernetes 的环境,今天就来实际使用看看,将应用程序透过 Pod 部属到 k8s 内部。

Kubernetes 基础元件

在 Kubernetes 有着各式元件,有负责建置容器,也有负责管理网路的。使用 K8s 的方法就是根据需求来建置所需要的元件,这里就来介绍最基本的 Node 以及 Pod 。

Node

Node 是 Kubernetes 的硬体单位,可以是实体机或虚拟机,作为工作节点提供运算资源。

Pod

Pod 是 Kubernetes 的最小运行单位,由一个或多个容器所组成,一个 Pod 对应一个应用程序。

实际情况来说,在一个 k8s 丛集上会有许多 Node,代表实际的运算资源,里面安装了如 Docker 的容器平台,而 k8s 就会以 Pod 为单位将容器放入到 Node 上做运行。

Kubectl 基本操作

要如何建立、管理 Kubernetes 的元件,可以使用Kubectl工具,我们就来实际练习看看。

  1. 进入 Cloud Shell 网站,点击终端机输入指令

  2. 列出所有的 project ,找到之前所创建专案的 PROJECT_ID

gcloud projects list

  1. 点击倒三角形->点选专案的 PROJECT_ID,开启专案 Terminal

在前一篇中已经设置好了kubectl工具了,现在使用kubectl get <type>就能够查看丛集上的各种元件。

  1. 查看所有 Node 元件
kubectl get nodes

(输出结果)

NAME                                STATUS  ROLES   AGE    VERSION
gke-lab-default-pool-9638ad20-l69n  Ready   <none>  7m50s  v1.20.9-gke.701
gke-lab-default-pool-9638ad20-tnlg  Ready   <none>  7m50s  v1.20.9-gke.701
gke-lab-default-pool-9638ad20-x3jm  Ready   <none>  7m50s  v1.20.9-gke.701

这里对应着 GCP 上的三台 VM ,被加入到 k8s 作为工作节点,使用kubectl describe <type> <object name>就能查看详细资料。

  1. 查看 Node 资讯,将<object name>改为你任一 Node 的名称
kubectl describe node <object name>

会输出这个 Node 的资讯,包括 IP、系统资源、事件等等。

https://ithelp.ithome.com.tw/upload/images/20210911/20139235v8nKJZjnfQ.png

Pod 建立

要如何在 Kubernetes 建立元件,可以在一个 yaml 文件中描述,下面就来使用 yaml 档来建置 Pod 。

  1. 建立 k8s-test 资料夹
cd && mkdir k8s-test
  1. 建立 yaml 档案
cd ~/k8s-test && touch mypod.yaml
  1. 点击左上 Explorer -> Open Folder -> 选择 k8s-test 资料夹 -> Open

https://ithelp.ithome.com.tw/upload/images/20210912/20139235tXYtjLiGNr.png

  1. 点击mypod.yaml档案并贴上以下内容,并将<your iamge name>改成之前建立的 Image Name

这里的 Image 是在 Day08 所建立的 Node 应用

https://ithelp.ithome.com.tw/upload/images/20210911/20139235XxDNe66QdN.png

  • mypod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
  labels:
     app: myapp
spec:
  containers:
    - name: mycontainer
      image: <your iamge name>
      ports:
         - containerPort: 8080
  • apiVersion
    • 该元件的版本号,根据要建立的元件而定
  • kind
    • 要建立的元件
  • metadata
    • name: 指定该 pod 的名称
    • labels: 给定一个key/value,根据标签将 Pod 分群管理
  • spec
    • 负责定义 Container 详细资讯
    • containers
      • name: Container 的名称
      • image: Container 使用的 Image
      • ports: 指定哪些 Port 允许外部资源存取

建好了 yaml 档案,就可以使用kubectl apply -f <file>指令,Kubernetes 会根据 yaml档的内容建立相应元件。

  1. 根据mypod.yaml建立元件
kubectl apply -f mypod.yaml

使用kubectl get <type>就能够查看 Pod 元件。

  1. 查看所有 Pods
kubectl get pods

(输出结果)

# 刚建立时输入
NAME    READY   STATUS              RESTARTS   AGE
mypod   0/1     ContainerCreating   0          5s
# 建立完成後输入
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          14s

可以看到mypod建立成功并成功运行,使用kubectl describe <type> <object name>查看详细资料。

  1. 查看 mypod 详情
kubectl describe pod mypod

(输出结果 -> Event)

Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  90s   default-scheduler  Successfully assigned default/mypod to gke-lab-default-pool-9638ad20-l69n
  Normal  Pulling    89s   kubelet            Pulling image "gcr.io/ninth-bonito-324214/node-project:v1"
  Normal  Pulled     79s   kubelet            Successfully pulled image "gcr.io/ninth-bonito-324214/node-project:v1" in 9.834570297s
  Normal  Created    78s   kubelet            Created container mycontainer
  Normal  Started    78s   kubelet            Started container mycontainer

会显示 Pod 详细资讯,包括容器使用了什麽 Image 、运行事件等等。

存取 Pod 资源

建立好了 Pod 後,要怎麽跟里面的容器进行互动,常见的有两种方式

  • 使用 kubectl 做 port-forward
  • 建立一个 Service 元件

这里使用第一种方式,利用kubectl port-forward <pod> <本机 port>:<pod port>,可以将 Pod 中的某个 Port 跟本机端做映射。

  1. 将 mypod 的 8080 Port 映射到本机的 8080 Port
kubectl port-forward mypod 8080:8080

(输出结果)

Forwarding from 127.0.0.1:8080 -> 8080

此时透过 cloud shell 的 8080 Port 就能获取 Pod 里的服务。

  1. 在cloud shell点击网页预览->透过以下通讯预览 : 8080

看到回传讯息,成功的与容器进行互动。

https://ithelp.ithome.com.tw/upload/images/20210907/20139235NPmhN4uq8U.png

  1. 回到 Cloud Shell 终端机,点击Ctrl +c停止 port-forward

总结

今天学习到了 kubectl 基本指令,以及如何透过 yaml 档案来建置 Pod 元件,下一章将会介绍 service 元件,建立 Pod 的沟通管道。


<<:  Leetcode 挑战 Day 09 [344. Reverse String]

>>:  Day6 梯度提升树(Gradient Boosting Decision Tree)

第二十六天:在 TeamCity 上显示 API 文件

昨天我们介绍了如何用 KDoc 语法标记程序码并用 Dokka 来产生 API 文件,今天我们要将产...

【Day 25】 实作 - 启用 AWS WAF 日志

实作 -『如何启用 WAF日志以及汇入 BI 进行分析』, Data Analytics Pipel...

【课程推荐】2021/5/8~5/9 Angular前端开发框架入门班

课程目标 课程前半段主要让学员建立Angular开发框架相关基本观念,并透过Angular CLI建...

Day11 事件修饰符(2)

上次介绍完前面两个修饰符,今天就来把它学习完吧!!! .stop .prevent .capture...

16.unity介面按钮

今天来做按钮功能 一、创立UI按钮 二、撰写点击事件(方法) 接着搭配脚本,把脚本拉进去 publi...