Kubernetesについて見ていると、時々出てくるkube-systemというNamespace。これは、なんなのでしょう?
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にしてあるものを見かけるわけですよ。
これってどうしてなのでしょう?
…と書いたところで、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