CLOVER🍀

That was when it all began.

Kubernetesのkube-system Namespaceって?

Kubernetesについて見ていると、時々出てくるkube-systemというNamespace。これは、なんなのでしょう?

Namespaces - Kubernetes

Kubernetesの基礎 | Think IT(シンクイット)

Namespaceの説明を見ると、デフォルトで作成される3つのNamespaceのうちのひとつだそうです。

デフォルトで作成される3つのNamespaceとは、

  • default … Namespaceを持たないオブジェクトのデフォルトのNamespace
  • kube-system … Kubernetesによって作成されたオブジェクトのためのなNamespace
  • kube-public … 全ユーザーが読み込めるNamespace

kube-systemは、慣習的にシステムコンポーネントやアドオンとして位置づけられているものをデプロイするためのNamespace
だそうです。

また、kube-publicは慣習的に全ユーザーが共通して利用する設定値などを保存しておくために作成されるNamespaceだと。

で、ですね、DaemonSetの例などで、デプロイ先をkube-systemにしてあるものを見かけるわけですよ。

DaemonSet - Kubernetes

これってどうしてなのでしょう?

…と書いたところで、kube-system Namespace単体でどうのということではなく、DaemonSetでデプロイされる
イメージをシステムコンポーネントとして扱っているからだと気づく。

なんでkube-systemを選んだのかあんまり書いてないから、???って思うんですよねぇ。

最初、DaemonSetのように全Nodeにデプロイするようなものを使いたかったら、kube-systemにデプロイするのが
通例なのかと思い込みそうになっていました…。

実態としてはそうなることも多い気がしますが、デプロイ対象の位置づけを考えることが大事そうですねぇ。

この例のロギングのようなものは、Namespaceをまたがって使いたいものになるので、kube-systemに配置するという
ことなのでしょう。
※特定のユーザーNamespaceに置くよりも、共通的に使うものなのでkube-systemの方が扱いがわかりやすい

DaemonSetをどのNodeに配置するかを絞る場合は、Taints/TolerationsやNodeSelector、Node Affinityでやる感じですね。

Taints and Tolerations - Kubernetes

Assigning Pods to Nodes - Kubernetes

自分の考えを整理するための、とりとめもないメモでした。

以下、OKD/Minishiftでちょこっと見ておきます。

バージョン。

$ minishift version
minishift v1.29.0+72fa7b2


$ oc version
oc v3.11.0+0cbc58b
kubernetes v1.11.0+d4cacc0
features: Basic-Auth GSSAPI Kerberos SPNEGO

Server https://192.168.42.78:8443
kubernetes v1.11.0+d4cacc0

OKD 3.11で、デフォルトで作成されるNamespace。「kube-system」がありますね。

$ oc get namespaces --as system:admin
NAME                            STATUS    AGE
default                         Active    8m
kube-dns                        Active    8m
kube-proxy                      Active    8m
kube-public                     Active    8m
kube-system                     Active    8m
myproject                       Active    5m
openshift                       Active    7m
openshift-apiserver             Active    8m
openshift-controller-manager    Active    6m
openshift-core-operators        Active    8m
openshift-infra                 Active    8m
openshift-node                  Active    7m
openshift-service-cert-signer   Active    8m
openshift-web-console           Active    6m

Node。Minishiftなので、ひとつしかNodeはありませんが。

$ oc get node -o wide --as system:admin
NAME        STATUS    ROLES     AGE       VERSION           INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
localhost   Ready     <none>    25m       v1.11.0+d4cacc0   192.168.122.118   <none>        CentOS Linux 7 (Core)   3.10.0-862.14.4.el7.x86_64   docker://1.13.1

「kube-system」Namespace。

$ oc get all -n kube-system -o wide --as system:admin
NAME                                    READY     STATUS    RESTARTS   AGE       IP                NODE        NOMINATED NODE
pod/kube-controller-manager-localhost   1/1       Running   0          24m       192.168.122.118   localhost   <none>
pod/kube-scheduler-localhost            1/1       Running   0          24m       192.168.122.118   localhost   <none>
pod/master-api-localhost                1/1       Running   2          24m       192.168.122.118   localhost   <none>
pod/master-etcd-localhost               1/1       Running   0          23m       192.168.122.118   localhost   <none>

ちなみに、「kube-proxy」および「kube-dns」Namespaceは、こんな感じでした。

$ oc get all -n kube-proxy -o wide --as system:admin
NAME                   READY     STATUS    RESTARTS   AGE       IP                NODE        NOMINATED NODE
pod/kube-proxy-h92qn   1/1       Running   0          25m       192.168.122.118   localhost   <none>

NAME                        DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE       CONTAINERS   IMAGES                                   SELECTOR
daemonset.apps/kube-proxy   1         1         1         1            1           <none>          25m       kube-proxy   openshift/origin-control-plane:v3.11.0   k8s-app=kube-proxy


$ oc get all -n kube-dns -o wide --as system:admin
NAME                 READY     STATUS    RESTARTS   AGE       IP           NODE        NOMINATED NODE
pod/kube-dns-fhmjp   1/1       Running   0          26m       172.17.0.3   localhost   <none>

NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE       SELECTOR
service/kube-dns   ClusterIP   172.30.0.2   <none>        53/UDP,53/TCP   26m       k8s-app=kube-dns

NAME                      DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE       CONTAINERS   IMAGES                                   SELECTOR
daemonset.apps/kube-dns   1         1         1         1            1           <none>          26m       kube-dns     openshift/origin-control-plane:v3.11.0   k8s-app=kube-dns