0%

Kubernetes の基礎

Kubernetes の基礎

Kubernetes は、Kubernetes Master と Kubernetes Node の 2 種類のノードから成り立っています。

CLI ツールのkubectl はマニフェストファイル(.yaml,.yml,.json)の情報を元にKubernetes Master が持つ API にリクエストを送ることで Kubernetes を操作します。

また、Kubernetes Master の API は、一般的な RESTful API として実装されているので、各種プログラム言語の RESTful API ライブラリや curl などのコマンドラインツールを利用して、直接 API を呼び出して Kubernetes を操作することも可能です。

Kubernetes とリソース

Workloads APIs リソースがあります

● Pod
● ReplicationController
● ReplicaSet
● Deployment
● DaemonSet
● StatefulSet
● Job
● CronJob

Service APIs カテゴリ

Service APIs カテゴリは、コンテナのサービスディスカバリや、クラスタの外部からもア
クセス可能なエンドポイントなどを提供するリソースです。

● Service
・ ClusterIP
・ ExternalIP(ClusterIP の一種)
・ NodePort
・ LoadBalancer
・ Headless(None)
・ ExternalName
・ None-Selector
● Ingres

Config & Storage APIs カテゴリ

Config & Storage APIs カテゴリは、設定や機密データをコンテナに埋め込んだり、永続ボリュームを提供するリソースです。

● Secret
● ConfigMap
● PersistentVolumeClaim

Cluster APIs カテゴリ

クラスタ自体の振る舞いを定義するリソースです。セキュリティ周りの設定やポリシー、クラスタの管理性を高める機能のためのリソースなど、様々なリソースがあります。

● Node
● Namespace
● PersistentVolume
● ResourceQuota
● ServiceAccount
● Role
● ClusterRole
● RoleBinding
● ClusterRoleBinding
● NetworkPolicy

Metadata APIs カテゴリ

クラスタ内の他のリソースの動作を制御するためのリソースです。

例えば、Pod をオートスケーリングさせるために利用される HorizontalPodAutoscaler は、Deployment リソースを操作してレプリカ数を変更することでオートスケーリングを実現しています。

● LimitRange
● HorizontalPodAutoscaler
● PodDisruptionBudget
● CustomResourceDefinition

初期状態のNamespace

● kube-system
・ Kubernetes クラスタのコンポーネントやアドオンがデプロイされる Namespace
● kube-public
・ 全ユーザが利用できる ConfigMap などを配置する Namespace
● kube-node-lease
・ Kubernetes Node のハートビート情報を保存するための Lease リソースが保存されている専用の Namespace です。
● default
・ デフォルトの Namespace、ユーザが任意のリソースを登録するのに使用できます

RBAC(Role-Based Access Control)

RBAC は、図 4.2 のようにクラスタ操作に関する権限を Namespace ごとに分けることができるほか、Network Policy と組み合わせることで Namespace 間の通信の制御を行える仕組みです

CLI ツール kubectl

手動:kubectl

プログラム:クライアントライブラリ

認証情報と Context(config)

kubectl が Kubernetes Master と通信する際には、接続先サーバの情報や認証情報などが必要となります。

kubectl は kubeconfig(デフォルトでは~/.kube/config)に書かれている情報を使用して
接続を行います。

kubeconfig で具体的に設定を行う部分は、clustersuserscontexts の 3 種類の配列型です。複数の対象を登録することができます。

kubeconfigのsample

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: Config
preferences: {}
clusters: # 接続先クラスタ
- name: sample-cluster
cluster:
server: https://localhost:6443
users: # 認証情報
- name: sample-user
user:
client-certificate-data: LS0tLS1CRUdJTi...
client-key-data: LS0tLS1CRUdJTi...
contexts: # 接続先と認証情報の組み合わせ
- name: sample-context
context:
cluster: sample-cluster
namespace: default
user: sample-user
current-context: sample-context

contexts には、clusteruser のペアと namespace を指定したものを定義します。

kubeconfigの設定変更

  • クラスタ(prd-cluster)の定義を追加・変更

    1
    kubectl config set-cluster prd-cluster --server=https://localhost:6443
  • 認証情報の定義を追加・変更

    1
    2
    3
    4
    kubectl config set-credentials admin-user \
    --client-certificate=./sample.crt\
    --client-key=./sample.key \
    --embed-certs=true
  • Contextの定義(クラスタcluster/認証情報user/Namespaceを定義)を追加・変更

    1
    2
    3
    4
    kubectl config set-context prd-admin \
    --cluster=prd-cluster \
    --user=admin-user \
    --namespace=default

kubectl は Context(current-context)を切り替えることにより、複数の環境を複数の権限で操作できる。

  • Contextの一覧を表示

    1
    kubectl config get-contexts
  • Contextの切り替え use-context

    1
    kubectl config use-context prd-admin
  • 現在のContextを表示

    1
    kubectl config current-context
  • コマンドの実行ごとにContextを指定することも可能

    1
    kubectl --context prd-admin get pod