IT 铁人赛 k8s 入门30天 -- day6 主要 Kubectl 指令 - K8s CLI

前言

今天将要介绍 kubectl 一些常用的指令

这些指令会在後面实作的部份使用到

前置状态

minikube 已经安装, 并且已经启动一个 k8s 丛集

kubectl 已经安装

取得 node 状态

kubectl get nodes

如果已经有安装 minikube 并且跑起来一个 k8s 丛集

会有以下这个结果

取得 pod 状态

kubectl get pod

目前因为还没建制任何 pod 所以会是以下状态

取得 services 状态

kubectl get services

目前还没建制除了原本 minikube 预设丛集之外的 Services

所以会是以下画面

建制资源指令

查询使用指令

kubectl create -h

建立 Deployment 指令

注意的是 在 k8s 内并不直接建制 Pod

而是透过 建立 Pod 的建制蓝图 Deployment 来做 Pod 设定

然後 k8s 丛集会自动根据 Deployment 建制 Pod

建制 Deployment 指令如下:

kubectl create deployment Name --image=image [--dry-run] [options]

举例来说: 使用 nginx docker 映象档来建制 Name 为 nginx-deployment 的 Deployment 指令如下

kubectl create deployment nginx-deployment --image=nginx

注意的是, 这边没指令 image 版本, 会直接指定最新的版本

执行之後, 会有以下画面

查询 Deployment 指令

kubectl get deployment

在建立 Deployment 後

可以使用上面指令查询已建立的 Deployment

因为已经建制了一个叫作 nginx-deployment 的 Deployment

因此会得到以下的画面

查询 ReplicaSet 指令

kubectl get replicaset

在建立了 Deployment 之後

k8s 丛集会根据 Deployment 建立 Pod 以及 Pod 的 ReplicaSet

所以如果使用上面查询指令, 会得到以下画面

如果再用查询 Pod 的指令, 会得到以下画面

会发现 ReplicaSet 的 Name 栏位刚好是 Pod 的 Name 栏位 prefix

这个 Pod 属於这个 ReplicaSet

Deployment, Pod, ReplicaSet 阶层结构

Deployment 管理 ReplicaSet

ReplicaSet 管理 Pod 的 replicas

Pod 处理 Containers 执行

更改 deployment 指令

kubectl edit deployment [Name]

如果要修改 Pod 执行的方式, 可以透过上面的指令去做修改

举例来说: 修改 nginx-deployment 就可使用以下指令

kubectl edit deployment nginx-deployment

预设会使用 vim 开启一个预设的 Deployment 设定档

如果要更换 kubectl edit 的预设开启编辑器

可以设定 KUBE_EDITOR 这个环境变数

笔者习惯用 nano 所以先执行以下指令

export KUBE_EDITOR=nano

这样在执行 kubectl edit 指令时, 就是以 nano 开启 Deployment档案

笔者这边把原本的 nginx-deployment 的 image 版本更改为 nginx:1.16 储存後

这时可以用查询 Pod 的指令查看

会发现新的 Pod 产生中, 完成後会发现只剩下新的 Pod

然後去查 ReplicaSet

会看到新的 ReplicaSet 产生, 旧的 ReplicaSet 下面就没有 Pod

Debug 指令

查询 pod 执行纪录

kubectl logs $pod_name

会显示出 Pod 内, 容器化程序实际运行 log

可以拿来除错时 使用

以下是查询 Pod mongo-deployment-9fb7f9f76-4cq9x 的范例

查询 pod 状态

kubectl describe pod $pod_name

查询 Pod 运行时的事件, 可以查到 Pod 运行状态

举例来说: 如果用下面指令查询名称 mongo-deployment-9fb7f9f76-4cq9x 的 Pod 状态

kubectl describe pod mongo-deployment-9fb7f9f76-4cq9x

从上图可以看到 mongo-deployment-9fb7f9f76-4cq9x 的运行状态

直接开启 pod 内部的容器 terminal

kubectl exec -it $pod_name -- bin/bash

举例来说: 可以使用以下指令登入 mongo-deployment-9fb7f9f76-4cq9x 的 pod 内运行容器 terminal

kubectl exec -it mongo-deployment-9fb7f9f76-4cq9x -- bin/bash

注意的是, - - 但代表使用 root 身分登入

删除 deployment

kubectl delete deployment $deployment_name

如果想要删除 Pod 的话

可以透过删除 deployment 的指令来处理

使用设定档执行 kubectl

kubectl apply -f $configuration_file_name

随着发布的应用愈加复杂, kubectl 所需带入的参数愈加复杂

因此, 比较好且实际的作法是

把 kubectl 的所有运行选项写到一个设定档案

再透过上面的指令选择一个设定案来执行

举例来说, 假设一个 nginx-deployment.yaml 如下:

然後执行

kubectl apply -f nginx-deployment.yaml

然後可以用 kubectl get pod 查看

因为 replicas 设定为 2

所以应该会有两个 Pod 如下

如果要修改, 举例来说把 replicas 改成 1

就可以直接修改 nginx-deployment.yaml 如下

然後执行

kubectl apply -f nginx-deployment.yaml

然後就可以验证 Pod 只剩下一个如下

後记

很明显透过设定档来执行 kubectl

比互动式的下指令好管理的多

当要布署的环境很复杂时

而明天将会好好解说设定档的细节部份


<<:  DAY 05 实作环境配置 - 2

>>:  [Lesson5] BottomNavigationView

DAY24 搞样式--用CSS Gird来搞个万年历吧(上)

前言 今天开始实作的部分,尝试用完全没碰过的CSS Grid要搞出一个万年历,不停的研究不停地开发新...

系统分析师的养成之路—案例分享(2)

看完第一个案例不知道大家有什麽收获?欢迎给我一些回馈哦!接着,跟大家分享第二个案例罗! 欢迎有兴趣的...

虹语岚访仲夏夜-25(专业的小四篇)

好久没有看到的小七...好像也没多久,昨天才见过,但因为昨晚的那个恐布经历,我现在好想看到她,好想听...

Day 9 : 案例分享(3.2) 会计模组-日记帐 Odoo的会计核心运用

案例说明及适用场景 如果说一般的传票(日记帐分录),是通用性的功能,那 日记帐 应算是Odoo特有的...

DAY15-EXCEL统计分析:Z检定介绍

Z检定: 什麽时候需要用到z检定呢? 当已经知道母体变异数时或是知道是一个大样本但不知道变异数为多少...