[Oracle Cloud] Kubernetes クラスタを Quick Create したときの構成を確認してみた

# はじめに

Oracle Cloud では、Kubernetes マネージドサービスの Oracle Container Engine for Kubernetes (略してOKE) が提供されています。OKE は Quick Createで簡単に Kubernetes クラスタを構成できるので、使い始めのユーザー体験が良いです。Oracle によってマネージされた Kubernetes クラスタを簡単に使い始められます。

Quick Createで簡単に使い始められるのは良いですが、実際どんなリソースがどのように構成されているのでしょうか、気になったので自分が興味のある範囲でリソースを調査した結果を残しておきます。



# 構成図

Quick Createで作成されたときの、OCI 上の構成図を載せます。次のような環境が作成されます。

- VCN : OKE としての VCN。既存の VCN を利用することも可能
- Subnet : ロードバランサーが稼働する Public Subnet と、Node が稼働する Private Subnet 
- Node : コンテナが稼働する Node は、指定した数分自動構成

![1589682176427.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/afc69944-fa74-aa36-eec3-9ccf05f28e39.png)



# OKE Quick Create

OCI のメニューから、OKE を選択します。

![1586675854806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/0d944df0-b474-8633-77ee-88c1e5eeab5e.png)



Cluster を Create します

![1586675881761.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/93b7b9d7-7d6a-5b4c-6a46-2af69f1ef067.png)



Quick Create で、Launch Workflow を選びます

![1586675912930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6caca39c-0d5f-5369-d457-99889e97093f.png)



適当にパラメータを入力します。

![screencapture-console-ap-tokyo-1-oraclecloud-containers-clusters-quick-2020-04-12-16_27_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/3220b4d2-56e1-338c-edf7-6cd667a562e6.png)



Create を押します。

![1586676542199.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/171b0527-69c7-1e44-466d-3c913c2cf151.png)



Close を押します。

![1586676552511.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/61ee292b-26eb-9357-3628-e655e53963b6.png)



# OCI上で自動作成されたリソース確認

Quick Create を使って、OKE クラスタを作成しました。OKE クラスタを含めて、OCI 上で作成されたリソースを確認します。OKE の詳細画面を確認すると、Node を構成するための Node Pools があります。Node Pools は、OKE の中の概念となっていて、Node として動かす Compute Instance を何個動かすのか、Image は何を使うのか、といったものを管理します。Node Pools 上で、Node の数を変更することで、スケールを変えられます。

![1586699543352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/9fdc11d0-b1e8-cd80-eae1-1286dcb433c1.png)



Compute Instance の一覧に、`oke-XXX` という名前のインスタンスが見えます。Oracle Linux 7.7 で、Private Subnet 上に3個のインスタンスが作成されています。Fault Domain は正しくばらけています。

![1589668085938.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/86936cd2-cfab-5461-1429-036e393bc423.png)



Compute Instance の詳細画面を見ます。Network Security Group は設定されていないので、Security List で ファイアウォール制御されている構成です。手動で Network Security Group を割り当てるのは可能ですが、Node Pool としては設定出来ないのでやめたほうが良さそうです。

![1589668015645.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/732db0e8-2740-1495-1521-eba5749ebe5d.png)



自動作成された Node の Boot Volume は 47GB固定となっています。これは変更できないと思います。ストレージが必要な場合は、Object Storage や File Storage を使用すると良いでしょう。

![1589671601812.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/9c2d1134-9151-bb15-8899-9089176645f3.png)



仮想ネットワークの VCN が新たに作成されています。

![1589667898731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/23bf2df2-24cb-322a-5560-d67bcec126f1.png)



Private と Public Subnet が1つずつ作成されています。

![1589667937784.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6f45f0e5-4b49-62e1-6b31-e07b7661b456.png)



# Node の中身を確認

OKE で作成した Node に、SSH が可能です。VCN の Public Subnet に適当に踏み台サーバーを作成して、OKE Node へ SSH ログインしましょう。

```
[opc@oke-bastion ~]$ ssh opc@10.0.10.3
Oracle Linux Server 7.7
Last login: Sat May 16 22:51:01 2020 from 10.0.20.2
[opc@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 ~]$
```



Root ユーザーへスイッチが可能

```
[opc@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 ~]$ sudo su -
Last login: Sat May 16 22:51:33 UTC 2020 on pts/0
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 ~]# exit
logout
[opc@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 ~]$
```



ディスクの状況です。Docker のストレージバックエンドとしては、overlayfs2 が使われています。 

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 docker]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  7.2G     0  7.2G   0% /dev
tmpfs          tmpfs     7.3G     0  7.3G   0% /dev/shm
tmpfs          tmpfs     7.3G   18M  7.2G   1% /run
tmpfs          tmpfs     7.3G     0  7.3G   0% /sys/fs/cgroup
/dev/sda3      xfs        39G  3.7G   35G  10% /
/dev/sda1      vfat      200M  9.7M  191M   5% /boot/efi
tmpfs          tmpfs     7.3G   12K  7.3G   1% /var/lib/kubelet/pods/763959ae-9bc6-4b2b-87e9-b20d2c1c7a6a/volumes/kubernetes.io~secret/kube-proxy-token-9vxl4
tmpfs          tmpfs     7.3G   12K  7.3G   1% /var/lib/kubelet/pods/216a7cdb-009d-4cd5-a0f4-7e18a9fa6405/volumes/kubernetes.io~secret/flannel-token-tqb42
overlay        overlay    39G  3.7G   35G  10% /u01/data/docker/overlay2/d6fcded8cb7c947bd7dde23f957f7af3b9aecfc4c284d935655cc44ef0d89bcd/merged
overlay        overlay    39G  3.7G   35G  10% /u01/data/docker/overlay2/e9ef83a65cb9aa212ecbb8cce5866b4e199df72785c2b952a4759c46c281f602/merged
shm            tmpfs      64M     0   64M   0% /u01/data/docker/containers/9fcb249e0ca681903395c925b0f5648ecf9a13f5bcefb077e8b09b64b47498e0/mounts/shm
shm            tmpfs      64M     0   64M   0% /u01/data/docker/containers/8ea26e9884e500b576049e5312fd6b455d6b6327f39c944eb07af5fb1a813b1d/mounts/shm
overlay        overlay    39G  3.7G   35G  10% /u01/data/docker/overlay2/2bfb8b4d5596ebc49583f2adb48c0ae41e822dc74e6a8de6492289ebcd22613c/merged
tmpfs          tmpfs     7.3G   12K  7.3G   1% /var/lib/kubelet/pods/b66d0933-a0fb-4bc3-aa1a-d1b1ac27b77c/volumes/kubernetes.io~secret/default-token-gfctg
overlay        overlay    39G  3.7G   35G  10% /u01/data/docker/overlay2/a9b0fbec3860415aa8534533354d1d4053cb21673984f8e674e5b336dede603b/merged
shm            tmpfs      64M     0   64M   0% /u01/data/docker/containers/0e5f96c1da31da549fbf51cf83cd654845907594514ef75db676ef94e4416e0f/mounts/shm
overlay        overlay    39G  3.7G   35G  10% /u01/data/docker/overlay2/e77472ec5bc0a79da61e1be4438952db21ab72402b1df5e81e94e20e6ece53a6/merged
overlay        overlay    39G  3.7G   35G  10% /u01/data/docker/overlay2/3e5470604e1bd5e59fa6701e91611dc94bc9763ab60d06a47fb2e9f32d6edb67/merged
tmpfs          tmpfs     7.3G   12K  7.3G   1% /var/lib/kubelet/pods/9fad1f74-3b01-43c3-a5eb-fb7bbae22dd6/volumes/kubernetes.io~secret/coredns-token-8grdq
overlay        overlay    39G  3.7G   35G  10% /u01/data/docker/overlay2/ae1d91c9b5911a6f05be7593d30aba486722e73d3533e7b897e6d9a266d6e279/merged
shm            tmpfs      64M     0   64M   0% /u01/data/docker/containers/6836fec1f0b305fadea39bb745e7b5aa2139593e37c95d717e4cb4b13c7e77ee/mounts/shm
overlay        overlay    39G  3.7G   35G  10% /u01/data/docker/overlay2/ac05e95e3287b6125c07f0ddd489e174b01079e2a16a8cdcd9d40146956ce88a/merged
tmpfs          tmpfs     1.5G     0  1.5G   0% /run/user/1000
tmpfs          tmpfs     1.5G     0  1.5G   0% /run/user/0
```



ネットワークインターフェースの状態です。`cni0` という名前の Linux Bridge や veth が使われています。Docker の標準的な構成に見えますね。
`docker0` というインターフェースは、172.17.0.1/16 の固定になっているように見える。OKEを構成したときにパラメータは指定できなさそう。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 docker]# ip -d a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:00:17:00:e9:3c brd ff:ff:ff:ff:ff:ff promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 10.0.10.3/24 brd 10.0.10.255 scope global dynamic ens3
       valid_lft 81724sec preferred_lft 81724sec
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:5d:21:5e:f0 brd ff:ff:ff:ff:ff:ff promiscuity 0
    bridge forward_delay 1500 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 priority 32768 vlan_filtering 0 vlan_protocol 802.1Q bridge_id 8000.2:42:5d:21:5e:f0 designated_root 8000.2:42:5d:21:5e:f0 root_port 0 root_path_cost 0 topology_change 0 topology_change_detected 0 hello_timer    0.00 tcn_timer    0.00 topology_change_timer    0.00 gc_timer    5.71 vlan_default_pvid 1 vlan_stats_enabled 0 group_fwd_mask 0 group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1 mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 4 mcast_hash_max 512 mcast_last_member_count 2 mcast_startup_query_count 2 mcast_last_member_interval 100 mcast_membership_interval 26000 mcast_querier_interval 25500 mcast_query_interval 12500 mcast_query_response_interval 1000 mcast_startup_query_interval 3125 mcast_stats_enabled 0 mcast_igmp_version 2 mcast_mld_version 1 nf_call_iptables 0 nf_call_ip6tables 0 nf_call_arptables 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8950 qdisc noqueue state UNKNOWN group default
    link/ether 5a:47:be:59:26:8d brd ff:ff:ff:ff:ff:ff promiscuity 0
    vxlan id 1 local 10.0.10.3 dev ens3 srcport 0 0 dstport 14789 nolearning ttl inherit ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 10.244.2.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
5: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8950 qdisc noqueue state UP group default qlen 1000
    link/ether 0e:c2:59:3e:9e:8d brd ff:ff:ff:ff:ff:ff promiscuity 0
    bridge forward_delay 1500 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 priority 32768 vlan_filtering 0 vlan_protocol 802.1Q bridge_id 8000.e:c2:59:3e:9e:8d designated_root 8000.e:c2:59:3e:9e:8d root_port 0 root_path_cost 0 topology_change 0 topology_change_detected 0 hello_timer    0.00 tcn_timer    0.00 topology_change_timer    0.00 gc_timer  103.65 vlan_default_pvid 1 vlan_stats_enabled 0 group_fwd_mask 0 group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1 mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 4 mcast_hash_max 512 mcast_last_member_count 2 mcast_startup_query_count 2 mcast_last_member_interval 100 mcast_membership_interval 26000 mcast_querier_interval 25500 mcast_query_interval 12500 mcast_query_response_interval 1000 mcast_startup_query_interval 3125 mcast_stats_enabled 0 mcast_igmp_version 2 mcast_mld_version 1 nf_call_iptables 0 nf_call_ip6tables 0 nf_call_arptables 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 10.244.2.1/24 scope global cni0
       valid_lft forever preferred_lft forever
6: veth39036caf@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8950 qdisc noqueue master cni0 state UP group default
    link/ether 3e:81:d2:15:1c:24 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 1
    veth
    bridge_slave state forwarding priority 32 cost 2 hairpin on guard off root_block off fastleave off learning on flood on port_id 0x8001 port_no 0x1 designated_port 32769 designated_cost 0 designated_bridge 8000.e:c2:59:3e:9e:8d designated_root 8000.e:c2:59:3e:9e:8d hold_timer    0.00 message_age_timer    0.00 forward_delay_timer    0.00 topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off mcast_router 1 mcast_fast_leave off mcast_flood on vlan_tunnel off numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
```



Linux Bridge を確認します。brctl コマンドは Default で使えました。`cni0` と `docker0` があります。Kubernetes 上の Pod は、これらの技術を使ってネットワーク接続されています。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 docker]# brctl show
bridge name     bridge id               STP enabled     interfaces
cni0            8000.0ec2593e9e8d       no              veth39036caf
docker0         8000.02425d215ef0       no
```



Docker サービスが、Systemd で管理されています。コンテナラインタイムには、containerd を使っているようです。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 etc]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-05-16 22:18:40 UTC; 36min ago
     Docs: https://docs.docker.com
 Main PID: 14204 (dockerd)
    Tasks: 13
   Memory: 664.1M
   CGroup: /system.slice/docker.service
           └─14204 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

May 16 22:18:36 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:18:36.094073960Z" level=info msg="Loading containers: done."
May 16 22:18:40 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:18:40.089846132Z" level=warning msg="Not using native diff for overlay2, this may cause degraded perf...er=overlay2
May 16 22:18:40 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:18:40.090261244Z" level=info msg="Docker daemon" commit=76804b7 graphdriver(s)=overlay2 version=18.09.8-ol
May 16 22:18:40 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:18:40.090377885Z" level=info msg="Daemon has completed initialization"
May 16 22:18:40 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:18:40.099292299Z" level=info msg="API listen on /var/run/docker.sock"
May 16 22:18:40 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 systemd[1]: Started Docker Application Container Engine.
May 16 22:18:57 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:18:57.427602003Z" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/de...TaskDelete"
May 16 22:18:57 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:18:57.428419276Z" level=warning msg="0e1835d40b4236bc14a2867e3a2b0d0c0e77c67a758f21fb5740199c4a015621 cleanup: f...
May 16 22:19:28 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:19:28.387690363Z" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/de...TaskDelete"
May 16 22:19:28 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 dockerd[14204]: time="2020-05-16T22:19:28.387839650Z" level=warning msg="0d7ae13c6234d19a436432b6635ebce3f7e96a0cb3c34d31ce42bd0d34b9e408 cleanup: f...
Hint: Some lines were ellipsized, use -l to show in full.
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 etc]#
```



Docker の設定ファイルを確認します。Overlay2 が ストレージドライバとして使われています。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 docker]# cat /etc/docker/daemon.json
{
  "storage-driver": "overlay2",
  "ip-masq": false,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "20m",
    "max-file": "10"
  }
}
```



kubelet も、Systemd のサービスとして管理されています。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 etc]# systemctl status kubelet
● kubelet.service - Kubernetes Kubelet
   Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-05-16 22:18:51 UTC; 37min ago
 Main PID: 14497 (kubelet)
    Tasks: 15
   Memory: 44.4M
   CGroup: /system.slice/kubelet.service
           └─14497 /usr/bin/kubelet --authentication-token-webhook --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --client-ca-file=/etc/kubernetes/ca.crt --cluster-dns=10.96.5.5 --cluster-dom...

May 16 22:55:24 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:24.097991   14497 setters.go:73] Using node IP: "10.0.10.3"
May 16 22:55:30 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:30.768791   14497 plugins.go:636] Loaded volume plugin "flexvolume-oracle/oci"
May 16 22:55:30 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:30.841231   14497 plugins.go:636] Loaded volume plugin "flexvolume-oracle/oci"
May 16 22:55:30 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:30.862720   14497 plugins.go:636] Loaded volume plugin "flexvolume-oracle/oci"
May 16 22:55:34 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:34.103304   14497 setters.go:73] Using node IP: "10.0.10.3"
May 16 22:55:44 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:44.109248   14497 setters.go:73] Using node IP: "10.0.10.3"
May 16 22:55:51 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:51.746597   14497 plugins.go:636] Loaded volume plugin "flexvolume-oracle/oci"
May 16 22:55:51 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:51.801801   14497 plugins.go:636] Loaded volume plugin "flexvolume-oracle/oci"
May 16 22:55:51 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:51.824999   14497 plugins.go:636] Loaded volume plugin "flexvolume-oracle/oci"
May 16 22:55:54 oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubelet[14497]: I0516 22:55:54.116176   14497 setters.go:73] Using node IP: "10.0.10.3"
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 etc]#
```



Linux 上で kubelet のプロセスを確認します。色々なパラメータを指定しているのが見えますね。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 etc]# ps aux | grep -i kubelet
root     14497  2.2  0.6 871496 95740 ?        Ssl  22:18   0:49 /usr/bin/kubelet --authentication-token-webhook --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --client-ca-file=/etc/kubernetes/ca.crt --cluster-dns=10.96.5.5 --cluster-domain=cluster.local --cloud-provider=external --enable-controller-attach-detach --kubeconfig=/etc/kubernetes/kubelet.conf --event-qps=0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 --hostname-override=10.0.10.3 --node-ip=10.0.10.3 --pod-infra-container-image=ap-tokyo-1.ocir.io/odx-oke/oke-public/pause-amd64:3.1 --node-labels=name=pool1,node-role.kubernetes.io/node=,hostname=oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0,internal_addr=10.0.10.3,displayName=oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0,oke.oraclecloud.com/tenant_agent.version=1.24.1-e5e10ab-130,oke.oraclecloud.com/node.info.private_subnet=true,,oke.oraclecloud.com/node.info.private_worker=true,node.info/compartment.id_prefix=ocid1.tenancy.oc1,node.info/compartment.id_suffix=aaaaaaaaftfptyiomnr5vmsxmrhoqsz7tsgquz3kghjcjy4janm7rfzfaokq,node.info/compartment.name=poc02,,node.info/kubeletVersion=v1.15,node.info.ds_proxymux_client=true --network-plugin=cni --read-only-port=0 --provider-id=ocid1.instance.oc1.ap-tokyo-1.anxhiljrycetm7ycikin6s55o5eqqpk5pjdlnymhz7otf5por7jx7537trga --serialize-image-pulls=false --anonymous-auth=false --authorization-mode=Webhook --tls-cert-file=/var/lib/kubelet/pki/tls.pem --tls-private-key-file=/var/lib/kubelet/pki/tls.key --v=2
```



kubelet の 設定ファイルの場所はこちらです。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubernetes]# ls -la /etc/kubernetes/
total 24
drwxr-xr-x.  2 root root   70 May 16 22:18 .
drwxr-xr-x. 99 root root 8192 May 16 22:18 ..
-rw-r--r--.  1 root root 2054 May 16 22:18 bootstrap-kubelet.conf
-rw-r--r--.  1 root root 1289 May 16 22:18 ca.crt
-rw-------.  1 root root 2206 May 16 22:18 kubelet.conf
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubernetes]#
```



kubelet.conf の中身をみましょう。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubernetes]# cat kubelet.conf
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: secret
    server: https://192.29.37.141:6443
  name: default-cluster
contexts:
- context:
    cluster: default-cluster
    namespace: default
    user: default-auth
  name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: default-auth
  user:
    client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
    client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
```



`192.29.37.141` が Master Node の IP のようです。Global IP ですね。この Global IP で Whois を見ると、`Oracle Corporation` が Organization として見えているので、Oracle がマネージしているだろうなというのが確認できます。

![1589670215115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/c7a57678-b1fe-2486-2350-08defca32ea7.png)



Node から Master までは ICMP が届きます。かなり高速に通信出来る位置関係にあるようです。

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 kubernetes]# ping 192.29.37.141
PING 192.29.37.141 (192.29.37.141) 56(84) bytes of data.
64 bytes from 192.29.37.141: icmp_seq=1 ttl=61 time=2.10 ms
64 bytes from 192.29.37.141: icmp_seq=2 ttl=61 time=0.306 ms
64 bytes from 192.29.37.141: icmp_seq=3 ttl=61 time=0.309 ms
64 bytes from 192.29.37.141: icmp_seq=4 ttl=61 time=0.293 ms
64 bytes from 192.29.37.141: icmp_seq=5 ttl=61 time=0.240 ms
64 bytes from 192.29.37.141: icmp_seq=6 ttl=61 time=0.269 ms
64 bytes from 192.29.37.141: icmp_seq=7 ttl=61 time=0.264 ms
64 bytes from 192.29.37.141: icmp_seq=8 ttl=61 time=0.272 ms
64 bytes from 192.29.37.141: icmp_seq=9 ttl=61 time=0.291 ms
```



Docker としては、次のコンテナイメージが稼働しています

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-0 ~]# docker ps --size
CONTAINER ID        IMAGE                                                     COMMAND                  CREATED             STATUS              PORTS               NAMES
                                                 SIZE
90269a3a694a        ap-tokyo-1.ocir.io/axoxdievda5j/oke-public-coredns        "/coredns -conf /etc…"   About an hour ago   Up About an hour                        k8s_coredns_coredns-67bb89d7c6-9xr4k_kube-system_9fad1f74-3b01-43c3-a5eb-fb7bbae22dd6_0        0B (virtual 169MB)
6836fec1f0b3        ap-tokyo-1.ocir.io/odx-oke/oke-public/pause-amd64:3.1     "/pause"                 About an hour ago   Up About an hour                        k8s_POD_coredns-67bb89d7c6-9xr4k_kube-system_9fad1f74-3b01-43c3-a5eb-fb7bbae22dd6_0            0B (virtual 742kB)
0b7f52f68302        f0fad859c909                                              "/opt/bin/flanneld -…"   About an hour ago   Up About an hour                        k8s_kube-flannel_kube-flannel-ds-59nrt_kube-system_216a7cdb-009d-4cd5-a0f4-7e18a9fa6405_1      0B (virtual 44.6MB)
c466623f11ab        ap-tokyo-1.ocir.io/axoxdievda5j/oke-public-proxymux-cli   "/bin/proxymux.sh --…"   About an hour ago   Up About an hour                        k8s_proxymux-client_proxymux-client-d46gt_kube-system_b66d0933-a0fb-4bc3-aa1a-d1b1ac27b77c_0   0B (virtual 273MB)
0e5f96c1da31        ap-tokyo-1.ocir.io/odx-oke/oke-public/pause-amd64:3.1     "/pause"                 About an hour ago   Up About an hour                        k8s_POD_proxymux-client-d46gt_kube-system_b66d0933-a0fb-4bc3-aa1a-d1b1ac27b77c_0               0B (virtual 742kB)
7652cb05c286        ap-tokyo-1.ocir.io/axoxdievda5j/oke-public-kube-proxy     "/usr/local/bin/kube…"   About an hour ago   Up About an hour                        k8s_kube-proxy_kube-proxy-qz45b_kube-system_763959ae-9bc6-4b2b-87e9-b20d2c1c7a6a_0             0B (virtual 82.1MB)
8ea26e9884e5        ap-tokyo-1.ocir.io/odx-oke/oke-public/pause-amd64:3.1     "/pause"                 About an hour ago   Up About an hour                        k8s_POD_kube-flannel-ds-59nrt_kube-system_216a7cdb-009d-4cd5-a0f4-7e18a9fa6405_0               0B (virtual 742kB)
9fcb249e0ca6        ap-tokyo-1.ocir.io/odx-oke/oke-public/pause-amd64:3.1     "/pause"                 About an hour ago   Up About an hour                        k8s_POD_kube-proxy-qz45b_kube-system_763959ae-9bc6-4b2b-87e9-b20d2c1c7a6a_0                    0B (virtual 742kB)
```



Node には kubectl が入っていないようです



# Kubernetes のリソースを確認

Kubernetes クラスタとしてのリソースを確認してみましょう。kubectl というコマンドでアクセスするために、Access Cluster を選択します。

![1589674618394.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/b9e81f06-71d4-a332-f0ae-37a47c0f2902.png)



Launch Cloud Shell を押します。Webブラウザ上で操作できる Liunx 環境が立ち上がります。

![1589674652687.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5f3b6721-00ad-3596-8321-64f7f26708ac.png)



kubectl で接続するための設定用コマンドをコピーします。

![1589674718583.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/fe5457ae-ac57-8b74-b8c4-41e492a904c6.png)



Cloud Shell に貼り付け (Ctrl + V で可能) て実行します。

```
suguru_sug@cloudshell:~ (ap-tokyo-1)$ oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.ap-tokyo-1.aaaaaaaaafrdayrvmuydsndcgftgcm3ghbrdmmztmrrdkmrwgcywgzrvme2w --file $HOME/.kube/config --region ap-tokyo-1 --token-version 2.0.0 
New config written to the Kubeconfig file /home/suguru_sug/.kube/config
```



Version の確認です。

```
suguru_sug@cloudshell:~ (ap-tokyo-1)$ kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.11", GitCommit:"d94a81c724ea8e1ccc9002d89b7fe81d58f89ede", GitTreeState:"clean", BuildDate:"2020-03-12T21:08:59Z", GoVersion:"go1.12.17", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.7", GitCommit:"a5e0d0bbd24669384f7b91897976ca5ab7703033", GitTreeState:"clean", BuildDate:"2020-04-09T21:51:20Z", GoVersion:"go1.12.7 BoringCrypto", Compiler:"gc", Platform:"linux/amd64"}
```



Node 一覧の確認です。

```
suguru_sug@cloudshell:~ (ap-tokyo-1)$ kubectl get nodes -o wide
NAME        STATUS   ROLES   AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                  KERNEL-VERSION                      CONTAINER-RUNTIME
10.0.10.2   Ready    node    120m   v1.15.7   10.0.10.2     <none>        Oracle Linux Server 7.7   4.14.35-1902.300.11.el7uek.x86_64   docker://18.9.8
10.0.10.3   Ready    node    120m   v1.15.7   10.0.10.3     <none>        Oracle Linux Server 7.7   4.14.35-1902.300.11.el7uek.x86_64   docker://18.9.8
10.0.10.4   Ready    node    120m   v1.15.7   10.0.10.4     <none>        Oracle Linux Server 7.7   4.14.35-1902.300.11.el7uek.x86_64   docker://18.9.8
```



Node の詳細を表示します。
Availbaility Domein の Label が設定されています。複数の Availability Domain 環境では、Node Affinity の指定で使えそうですね。Tokyo Region は 1Availability Domain なので、Fault Domain ごとのラベルを手動で設定するのが良さそうです。

```
> kubectl describe nodes 10.0.10.2
Name:               10.0.10.2
Roles:              node
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/instance-type=VM.Standard2.1
                    beta.kubernetes.io/os=linux
                    displayName=oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-2
                    failure-domain.beta.kubernetes.io/region=ap-tokyo-1
                    failure-domain.beta.kubernetes.io/zone=AP-TOKYO-1-AD-1
                    hostname=oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-2
                    internal_addr=10.0.10.2
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=10.0.10.2
                    kubernetes.io/os=linux
                    name=pool1
                    node-role.kubernetes.io/node=
                    node.info.ds_proxymux_client=true
                    node.info/compartment.id_prefix=ocid1.tenancy.oc1
                    node.info/compartment.id_suffix=aaaaaaaaftfptyiomnr5vmsxmrhoqsz7tsgquz3kghjcjy4janm7rfzfaokq
                    node.info/compartment.name=poc02
                    node.info/kubeletVersion=v1.15
                    oke.oraclecloud.com/node.info.private_subnet=true
                    oke.oraclecloud.com/node.info.private_worker=true
                    oke.oraclecloud.com/tenant_agent.version=1.24.1-e5e10ab-130
Annotations:        alpha.kubernetes.io/provided-node-ip: 10.0.10.2
                    flannel.alpha.coreos.com/backend-data: {"VtepMAC":"72:19:02:f2:49:47"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: 10.0.10.2
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Sat, 16 May 2020 22:18:49 +0000
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  10.0.10.2
  AcquireTime:     <unset>
  RenewTime:       Sun, 17 May 2020 01:36:20 +0000
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Sun, 17 May 2020 01:36:05 +0000   Sat, 16 May 2020 22:18:49 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Sun, 17 May 2020 01:36:05 +0000   Sat, 16 May 2020 22:18:49 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Sun, 17 May 2020 01:36:05 +0000   Sat, 16 May 2020 22:18:49 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Sun, 17 May 2020 01:36:05 +0000   Sat, 16 May 2020 22:19:09 +0000   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  10.0.10.2
Capacity:
  cpu:                2
  ephemeral-storage:  40223552Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             15116064Ki
  pods:               110
Allocatable:
  cpu:                2
  ephemeral-storage:  37070025462
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             15013664Ki
  pods:               110
System Info:
  Machine ID:                 ae205ca4b8404f28903a74c7a9b4e712
  System UUID:                E213110C-565F-4600-85F2-DFD1A3ACEE04
  Boot ID:                    8735189a-f743-46fe-bf70-f2cef4c7292a
  Kernel Version:             4.14.35-1902.300.11.el7uek.x86_64
  OS Image:                   Oracle Linux Server 7.7
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://18.9.8
  Kubelet Version:            v1.15.7
  Kube-Proxy Version:         v1.15.7
PodCIDR:                      10.244.1.0/24
ProviderID:                   ocid1.instance.oc1.ap-tokyo-1.anxhiljrycetm7ycz7gwbezinhxajpvz2ge4o24wygaekwxhggtl4wknqiaa
Non-terminated Pods:          (4 in total)
  Namespace                   Name                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                        ------------  ----------  ---------------  -------------  ---
  kube-system                 coredns-67bb89d7c6-9qd8w    100m (5%)     0 (0%)      70Mi (0%)        170Mi (1%)     3h16m
  kube-system                 kube-flannel-ds-h4lsr       100m (5%)     1 (50%)     50Mi (0%)        500Mi (3%)     3h17m
  kube-system                 kube-proxy-qrthc            0 (0%)        0 (0%)      0 (0%)           0 (0%)         3h17m
  kube-system                 proxymux-client-7gkpc       50m (2%)      500m (25%)  64Mi (0%)        256Mi (1%)     3h17m
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                250m (12%)  1500m (75%)
  memory             184Mi (1%)  926Mi (6%)
  ephemeral-storage  0 (0%)      0 (0%)
  hugepages-1Gi      0 (0%)      0 (0%)
  hugepages-2Mi      0 (0%)      0 (0%)
Events:              <none>
```



Kubernetes 上の全リソースを `kubectl get all --all-namespaces` コマンドで表示してみましょう。Kubernetes として必要なリソースが稼働しているのがわかります。

- CoreDNS
- Flannel

```
> kubectl get all --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-67bb89d7c6-9qd8w               1/1     Running   0          3h15m
kube-system   pod/coredns-67bb89d7c6-9xr4k               1/1     Running   0          3h15m
kube-system   pod/coredns-67bb89d7c6-rmmc8               1/1     Running   0          3h22m
kube-system   pod/kube-dns-autoscaler-655fffb489-54cr2   1/1     Running   0          3h22m
kube-system   pod/kube-flannel-ds-59nrt                  1/1     Running   1          3h16m
kube-system   pod/kube-flannel-ds-h4lsr                  1/1     Running   1          3h16m
kube-system   pod/kube-flannel-ds-pbvw2                  1/1     Running   1          3h16m
kube-system   pod/kube-proxy-q688m                       1/1     Running   0          3h16m
kube-system   pod/kube-proxy-qrthc                       1/1     Running   0          3h16m
kube-system   pod/kube-proxy-qz45b                       1/1     Running   0          3h16m
kube-system   pod/proxymux-client-7gkpc                  1/1     Running   0          3h15m
kube-system   pod/proxymux-client-d46gt                  1/1     Running   0          3h15m
kube-system   pod/proxymux-client-lz874                  1/1     Running   0          3h16m

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  3h24m
kube-system   service/kube-dns     ClusterIP   10.96.5.5    <none>        53/UDP,53/TCP,9153/TCP   3h22m

NAMESPACE     NAME                                          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                       AGE
kube-system   daemonset.apps/kube-flannel-ds                3         3         3       3            3           beta.kubernetes.io/arch=amd64       3h22m
kube-system   daemonset.apps/kube-proxy                     3         3         3       3            3           beta.kubernetes.io/os=linux         3h22m
kube-system   daemonset.apps/nvidia-gpu-device-plugin       0         0         0       0            0           <none>                              3h22m
kube-system   daemonset.apps/nvidia-gpu-device-plugin-1-8   0         0         0       0            0           <none>                              3h22m
kube-system   daemonset.apps/proxymux-client                3         3         3       3            3           node.info.ds_proxymux_client=true   3h22m

NAMESPACE     NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns               3/3     3            3           3h22m
kube-system   deployment.apps/kube-dns-autoscaler   1/1     1            1           3h22m

NAMESPACE     NAME                                             DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/coredns-67bb89d7c6               3         3         3       3h22m
kube-system   replicaset.apps/kube-dns-autoscaler-655fffb489   1         1         1       3h22m
```

# kube-proxy を確認

プロセスの確認
proxy-mode は何も指定して無いので、現状では iptables が選ばれるようです。
https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/

```
[root@oke-cywgzrvme2w-n2timtcmvqw-sv75u4uwhqq-2 ~]# ps aux | grep -i kube-proxy
root     14986  0.1  0.2 138996 36560 ?        Ssl  May16   0:41 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=10.0.10.2
```

設定値の確認

```
# cat config.conf
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
clientConnection:
  acceptContentTypes: ""
  burst: 10
  contentType: application/vnd.kubernetes.protobuf
  kubeconfig: /var/lib/kube-proxy/kubeconfig.conf
  qps: 5
clusterCIDR: 10.244.0.0/16
configSyncPeriod: 15m0s
conntrack:
  maxPerCore: 32768
  min: 131072
  tcpCloseWaitTimeout: 1h0m0s
  tcpEstablishedTimeout: 24h0m0s
enableProfiling: false
healthzBindAddress: 0.0.0.0:10256
hostnameOverride: ""
iptables:
  masqueradeAll: false
  masqueradeBit: 14
  minSyncPeriod: 0s
  syncPeriod: 30s
ipvs:
  excludeCIDRs: null
  minSyncPeriod: 0s
  scheduler: ""
  strictARP: false
  syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 127.0.0.1:10249
mode: ""
nodePortAddresses: null
oomScoreAdj: -999
portRange: ""
resourceContainer: /kube-proxy
udpIdleTimeout: 4h10m0s
winkernel:
  enableDSR: false
  networkName: ""
  sourceVip: ""
```