Yossy's Notes
Loading
初めまして。私は都内でwebエンジニアをしています。
今の会社にインターンとして経て、入社しました。
業務では、Nuxtjs, Golang, Kubernetesを用いて運用保守開発や
最近はPandasを用いてデータ分析など日々苦戦している若輩者です。
業務でKubernetesを扱い初めて一年ほどになるので、自信を付けたくてCertified Kubernetes Administrator(CKA)を取ることにしました。
Certified Kubernetes Administrator(CKA)を目指している人
Kubernetes初学者
ここではそれぞれのコンポーネントについて説明していきます。
バージョンによってコマンドが違うのは歴史的な背景を知る必要がある。
クラスターに加えられた全ての変更は、etcdサーバーに変更される
etcdに更新された時点で初めて変更が完了したことになる。
etcdと唯一やり取りをするコンポーネント
SchedulerやKubeletなどとetcdの仲介役
これらのコンポーネントはKube-apiserverを通じて、それぞれの領域でクラスタ内の更新を行う
異なるコンポーネントとやり取りするときにSSL/TLS証明書が使われている
Nodeの状態を常に監視し、異常があれば必要措置を行う。
Kubernetesで使われるControllerとはシステム内の様々なコンポーネントの状態を継続的に監視し、システム全体を望ましい状態にするためのプロセスのことを言う。
RepricaSet, Stateful-set, CronJobなどもKube Controller Managerと呼ばれる一つのプロセスにパッケージ化されている。
master nodeと唯一やり取りをするコンポーネント
masterのschedulerの指示に従いコンテナのコントロールを行う
Kubernetesワーカーノード内のKubeletがノードをKubernetesクラスターに登録する。
ノード上でコンテナやポッドをロードする指示を受けると、Dockerなどのコンテナランタイムエンジンに要求し、必要なImageを引き出してインスタンスを実行する。
Kubernetesクラスタの各ノードで実行されるプロセス
新しいServiceが生まれるたびに、そのServiceへのトラフィックをバックエンドポッドに転送するための適切なルールを各ノードで作成すること。
ServiceはKubernetesのメモリのみ存在する仮想的なコンポーネント
podは、spec.nodeName
で定義されたnodeにスケジュールされる。
Schedulerはこのプロパティが設定されていないpodがあれば、適したnodeを特定し、Bindingオブジェクトを生成しスケジュールする。
Labelはオブジェクトをグループ化するため
Selectorはオブジェクトをフィルターするため
識別用途でない任意のメタデータをオブジェクトに割り当てるためのフィールド
annotationはオブジェクトを一意に識別するためのものではない。
Kubernetesでは内部的に使われず、人間が識別するために使われる
ノード上でスケジュールできるポッドの制限する
podに特定のnodeに行くように指示するものではなく、nodeに許容範囲のpodのみ受け入れるように設定する
Taintsの設定の仕方
kubectl traint nodes <node-name> <key>=<value>:<taint-effect>
# NoSchefule
# PreferNoSchedule
# NoExecute
Taintsを外したい時
kubectl traint nodes <node-name> <key>=<value>:<taint-effect>-
Coming Soon...
一言で言えば、initContainerのNode版
kubelet がアクセスできる場所に配置することで Pod を作成できる。
Kubernetes API Server によって管理されず、kubelet によって直接管理される。
証明書署名リクエスト(Certificate Signing Request、CSR)を作成するためのもの
# sample manifest
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: <name>
spec:
groups:
- system:authenticated
request: <Paste the base64 encoded value of the CSR file>
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
Kubernetesにおける認証のグループを指定する
system:authenticated
system:nodes
:
system:serviceaccounts
system:controllers
system:authenticated:oauth
system:masters
証明書署名要求(Certificate Signing Request)をbase64エンコードした値を指定する
**kubernetes.io/
**で始まる署名者名が指定される
kubernetes.io/kube-apiserver-client
kubernetes.io/kubelet-serving
kubernetes.io/etcd-serving
kubernetes.io/legacy-unknown
kubernetes.io/kube-proxy
kubernetes.io/service-account-signing-key
証明書がどのような目的で使用されるかを指定できる
client auth
server auth
key encipherment
data encipherment
digital signature
cert sign
crl sign
クラスター、ユーザー(役割)、名前空間をまとめ、簡単に切り替えることができる
$HOME/.kube/config
ファイルに定義される
apiVersion: v1
kind: Config
clusters:
- name: my-cluster
cluster:
certificate-authority: /path/to/ca.crt
server: https://my-cluster.example.com
users:
- name: my-user
user:
client-certificate: /path/to/user.crt
client-key: /path/to/user.key
contexts:
- name: my-context
context:
cluster: my-cluster
user: my-user
current-context: my-context
随時更新していきます。