学习Kubernetes~第三部分:kubectl~

索引

    1. 之前的摘要

 

    1. 执行kubectl指令

 

    1. 有关术语

 

    后记

上次的摘要

上次学习Kubernetes的第二部分,花费在家庭局域网环境设置上。我们添加了Vagrant设置的桥接适配器,并意识到需要了解Vagrant!尽管每次都会遇到困难,但我相信失败会成为力量!这仅针对与人命无关的事情。

使用kubectl进行操作

根据官方文档,kubectl可以控制Kubernetes集群。看到这个,我觉得可以经常使用一些命令来操作,于是就决定按照参考手册尝试一些命令。

首先,让我们掌握语法。如果不了解英语的语法,就无法理解说些什么,所以语法是必不可少的。※并不是说我懂英语。

kubectl [command] [TYPE] [NAME] [flags]
パラメータ意味command必須。リソースに対して実行したい操作を指定する。TYPE必須。リソースのタイプを指定する。大文字小文字を区別しない。NAMEリソースの名前を指定する。大文字小文字を区別する。flagsオプションのフラグを指定する。

嗯,坦率地说,光光看这些还是不明白,而且也不能在想回头再看的时候用!!所以嘛。

命令的详细信息

获得

以列表形式在每行显示一个对象。用于快速检查信息。

使用例
kubectl get [TYPE]
kubectl get [TYPE] [NAME]
kubectl get [TYPE] [NAME] [flags]
kubectl get -f [マニフェスト or ディレクトリ]

nodeの一覧取得
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   20h   v1.14.10
node1    Ready    <none>   20h   v1.14.10
node2    Ready    <none>   20h   v1.14.10

描述

显示更详细的信息。所以,当涉及到节点或信息收集时,选择这个选项。

使用例
kubectl describe [TYPE]
kubectl describe [TYPE] [NAME]
kubectl describe [TYPE] [NAME] [flags]
kubectl describe -f [マニフェスト or ディレクトリ]

D:\Repository\kubernetes\vagrant-kubernetes>kubectl describe node
Name:               master
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=master
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/master=
Annotations:        flannel.alpha.coreos.com/backend-data: {"VtepMAC":"be:02:42:8d:f8:a1"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: 172.16.20.11
                    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Mon, 01 Feb 2021 19:19:39 +0900
Taints:             node-role.kubernetes.io/master:NoSchedule
Unschedulable:      false
Lease:
  HolderIdentity:  master
  AcquireTime:     <unset>
  RenewTime:       Tue, 02 Feb 2021 16:14:14 +0900
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Tue, 02 Feb 2021 16:13:25 +0900   Tue, 02 Feb 2021 07:57:37 +0900   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Tue, 02 Feb 2021 16:13:25 +0900   Tue, 02 Feb 2021 07:57:37 +0900   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Tue, 02 Feb 2021 16:13:25 +0900   Tue, 02 Feb 2021 07:57:37 +0900   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Tue, 02 Feb 2021 16:13:25 +0900   Tue, 02 Feb 2021 13:16:55 +0900   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  172.16.20.11
  Hostname:    master
Capacity:
  cpu:                2
  ephemeral-storage:  40593612Ki
  hugepages-2Mi:      0
  memory:             2040788Ki
  pods:               110
Allocatable:
  cpu:                2
  ephemeral-storage:  37411072758
  hugepages-2Mi:      0
  memory:             1938388Ki
  pods:               110
System Info:
  Machine ID:                 fe17ffbebd914d0caddb55c160e155bd
  System UUID:                2C843C62-0958-874D-A5CD-E808C1F91549
  Boot ID:                    ef62e7c4-0e2d-4ea4-89bf-e5494fae1752
  Kernel Version:             4.15.0-135-generic
  OS Image:                   Ubuntu 18.04.5 LTS
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://18.6.1
  Kubelet Version:            v1.14.10
  Kube-Proxy Version:         v1.14.10
PodCIDR:                      10.244.0.0/24
Non-terminated Pods:          (10 in total)
  Namespace                   Name                                          CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                                          ------------  ----------  ---------------  -------------  ---
  kube-system                 coredns-6dcc67dcbc-fc5tf                      100m (5%)     0 (0%)      70Mi (3%)        170Mi (8%)     20h
  kube-system                 coredns-6dcc67dcbc-s7bxw                      100m (5%)     0 (0%)      70Mi (3%)        170Mi (8%)     20h
  kube-system                 etcd-master                                   0 (0%)        0 (0%)      0 (0%)           0 (0%)         20h
  kube-system                 kube-apiserver-master                         250m (12%)    0 (0%)      0 (0%)           0 (0%)         20h
  kube-system                 kube-controller-manager-master                200m (10%)    0 (0%)      0 (0%)           0 (0%)         20h
  kube-system                 kube-flannel-ds-amd64-s7kgq                   100m (5%)     100m (5%)   50Mi (2%)        50Mi (2%)      20h
  kube-system                 kube-proxy-75l8x                              0 (0%)        0 (0%)      0 (0%)           0 (0%)         20h
  kube-system                 kube-scheduler-master                         100m (5%)     0 (0%)      0 (0%)           0 (0%)         20h
  kubernetes-dashboard        cluster-admin-74867ffb65-k6txp                0 (0%)        0 (0%)      0 (0%)           0 (0%)         20h
  kubernetes-dashboard        dashboard-metrics-scraper-69fcc6d9df-jrcn2    0 (0%)        0 (0%)      0 (0%)           0 (0%)         20h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests     Limits
  --------           --------     ------
  cpu                850m (42%)   100m (5%)
  memory             190Mi (10%)  390Mi (20%)
  ephemeral-storage  0 (0%)       0 (0%)
  hugepages-2Mi      0 (0%)       0 (0%)
Events:              <none>

※node1、node2は省略

创建

生成输出到清单或标准输出的对象。由于经常需要创建对象,因此这也是常用的功能。

使用例
kubectl create -f [ファイル名]

URLからオブジェクトを作成
D:\Repository\kubernetes\vagrant-kubernetes>kubectl create -f ここにURLとYAMLファイル指定
deployment.extensions/memory-eater created

作成を確認
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
memory-eater-7889865958-r7p5z   1/1     Running   2          89s

申请

在这里,如果再次执行刚刚创建的YAML文件,由于同一对象已经存在,所以会导致错误。因此,如果对象不存在,则应用”apply”命令可以创建它,如果对象存在,则可以更新它。

使用例
kubectl apply -f [ファイル名]

状態確認
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
memory-eater-7889865958-r7p5z   1/1     Running   2          89s

消します。
D:\Repository\kubernetes\vagrant-kubernetes>kubectl delete -f ここにURLとYAMLファイル指定
deployment.extensions "memory-eater" deleted

消えたか確認
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get pod
No resources found in default namespace.

applyは?
D:\Repository\kubernetes\vagrant-kubernetes>kubectl apply -f ここにURLとYAMLファイル指定
deployment.extensions/memory-eater created

確認します。
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
memory-eater-7889865958-lvc55   1/1     Running   1          46s

いた。

刪除

刚刚我也删除了。

使用例
kubectl DELETE -f [ファイル名]

分类的详细信息

指定资源类型的时候,发现可供选择的资源类型相当多。因此,我们只筛选出了那些看起来是必需的。如果想要了解更多详情,可以参考官方文档。
前往资源类型列表
在 kubectl 中也可以查看资源类型的一览。

kubectl api-resources

音頻
(簡稱:po)

容器的最小单元。在K8s集群的网络中具有IP地址。可以启动一个或多个容器。
Pod的复数形式可以是pod或pods,但在某些情况下,复数形式不适用。

服务(缩写:svc)

如何将在Pod集合中运行的应用程序作为网络服务公开。

由于节点的IP地址是不稳定的,并且Pod分散在不同的节点上,因此如果在通信时使用IP地址进行指定,可能会遇到无法连接的问题。因此,提供一个单一的连接目标,使连接源不需要意识到IP地址成为其职责。

入口(简称:ing)

Service能够提供与外部建立通信的URL、负载均衡流量、SSL/TLS终端功能以及基于名称的虚拟托管。这是一种担任负载均衡器角色的功能吧。

部署(简写:部署)

可以提供更新或回退等部署管理机制。

标志的详细信息

由于公式的重点是输出选项,所以花费了一些时间来查找,但似乎也可以指定名称空间。

-n 命名空间 (n

将其设为指定的命名空间。

–全命名空间

将所有内容都限定在命名空间内。

使用 YAML 格式的选项值为 “o”。

以YAML格式显示API对象。

-o=json的含义是将数据以JSON格式输出。

以JSON格式显示API对象。

关于术语

写下来,总结所需的术语,以便在需要时回想起来。

– 对象
K8s的对象是指K8s集群中的实体,如Pod和Service。
– 清单
用于生成K8s对象的声明文件。

作者的话

这次查看命令和实际输入命令花了相当多的时间,我觉得。但是通过亲身操作和确认动作,整理内容,我觉得已经掌握了。下次打算学习关于制作清单的方法。因为我一边听B’z的CD一边做这个,有时候会变得有点兴奋。如果不冷静的话可能会引起错误。

文献引用

学习Kubernetes的15个步骤,从Docker开始进入的Kubernetes文档。

bannerAds