KubernetesのNetworkPolicyとかNodeAffinityやinitContainersを備忘録的にメモ
タイトルの通りですが、備忘録です。 色々と機能あるので知らないことがいっぱいです。記憶定着させる意味も込めて書いているのでそんなたいした内容はないです。
The NetworkPolicy Resource
ほぼ公式に書いてあるから不要かもですが、サンプルだとこんな感じ。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - ipBlock: cidr: 172.17.0.0/16 except: - 172.17.1.0/24 - namespaceSelector: matchLabels: project: myproject - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 6379 egress: - to: - ipBlock: cidr: 10.0.0.0/24 ports: - protocol: TCP port: 5978
この pod からあのへの通信だけ許可するみたいなときに使います。
以下のように記載して、 role: db
というラベルがついた pod へは role: frontend
というラベルがついた pod からしか通信できないようにするものです。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: role: frontend
使い所ありそう。
Node Affinity
これもほぼ公式に書いてあるのですが、初見でちょっとうわってなるのでかいつまんでメモ。
まずサンプルはこんな感じです。
apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/e2e-az-name operator: In values: - e2e-az1 - e2e-az2 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value containers: - name: with-node-affinity image: k8s.gcr.io/pause:2.0
requiredDuringSchedulingIgnoredDuringExecution
がスケジューリング中のものに適用して、すでに実行済みのものは対象外だよ的な意味です。
matchExpressions
の key
の部分なのですが、node で describe 見るとわかりやすいです。 Labels: kubernetes.io/role=node
とか記載があるはずです。もしくは、 kubectl get nodes --show-labels
でもいいかもしれません(ちょっと見づらいですが)
例えば、 kubernetes.io/hostname
を使えば指定したホスト名を持った node に pod を固めることもできます。ゾーンとかの方が使うのかな。
initContainers
公式ですが、ここをみるよりはこっちを見た方がわかりやすかったです。
サンプルは以下の通りです。
apiVersion: v1 kind: Pod metadata: name: init-demo spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html # These containers are run during pod initialization initContainers: - name: install image: busybox command: - wget - "-O" - "/work-dir/index.html" - http://kubernetes.io volumeMounts: - name: workdir mountPath: "/work-dir" dnsPolicy: Default volumes: - name: workdir emptyDir: {}
emptyDir なので非永続化ボリュームを用意しています。それをまず initContainers で定義した busybox で /work-dir
にマウントして wget を利用して index.html を emptyDir に保存しています。nginx コンテナも workdir を /usr/share/nginx/html
へボリュームマウントしていますので、先ほど保存した index.html が保存された状態であがってきます。Kubernetes の世界でクローズ出来ていいですね。使い所あるかな。
その他
ちなみに Kubernetes の基礎知識が足りてないな、知識ちゃんと保管したいな・・・って人は以下の参考書がオススメです。 かなり詳細にそして網羅されているので、これ一冊読んでおけば大丈夫です。電子書籍版もあります
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: Kelsey Hightower,Brendan Burns,Joe Beda,松浦隼人
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/03/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: 山田明憲
- 出版社/メーカー: 技術評論社
- 発売日: 2018/08/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る