はじめに
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 は、指定した数分自動構成
OKE Quick Create
OCI のメニューから、OKE を選択します。
Cluster を Create します
Quick Create で、Launch Workflow を選びます
適当にパラメータを入力します。
Create を押します。
Close を押します。
OCI上で自動作成されたリソース確認
Quick Create を使って、OKE クラスタを作成しました。OKE クラスタを含めて、OCI 上で作成されたリソースを確認します。OKE の詳細画面を確認すると、Node を構成するための Node Pools があります。Node Pools は、OKE の中の概念となっていて、Node として動かす Compute Instance を何個動かすのか、Image は何を使うのか、といったものを管理します。Node Pools 上で、Node の数を変更することで、スケールを変えられます。
Compute Instance の一覧に、oke-XXX
という名前のインスタンスが見えます。Oracle Linux 7.7 で、Private Subnet 上に3個のインスタンスが作成されています。Fault Domain は正しくばらけています。
Compute Instance の詳細画面を見ます。Network Security Group は設定されていないので、Security List で ファイアウォール制御されている構成です。手動で Network Security Group を割り当てるのは可能ですが、Node Pool としては設定出来ないのでやめたほうが良さそうです。
自動作成された Node の Boot Volume は 47GB固定となっています。これは変更できないと思います。ストレージが必要な場合は、Object Storage や File Storage を使用すると良いでしょう。
仮想ネットワークの VCN が新たに作成されています。
Private と Public Subnet が1つずつ作成されています。
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 がマネージしているだろうなというのが確認できます。
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 を選択します。
Launch Cloud Shell を押します。Webブラウザ上で操作できる Liunx 環境が立ち上がります。
kubectl で接続するための設定用コマンドをコピーします。
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: ""