はじめてのKubernetes
About
Kubernetesをはじめて触ってみた。
その際の記録。
- 教材
- 技術評論社 「みんなのDocker/Kubernetes」
環境構築
Docker for MacではKubernetesがサポートされている。
Docker for MacのPreferenceを開き、KubernetesタブからEnable Kubernetesにチェックを入れればKubernetesのインストールが始まり、少し待つとKubernetesが使用できるようになる。とても簡単!
kubectl cluster-info
コマンドを実行し、次のような結果が返って来れば導入成功!
Kubernetes master is running at https://kubernetes.docker.internal:6443 KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
やってみた
Kubernetsでは「マニフェスト」と呼ばれる定義ファイルに「リソース」を記述して登録することで、コンテナを実行する。
- Word List
- Pod
- コンテナの管理に使用するリソース。1つ以上のコンテナのグループを表し、Kubenetsにおけるコンテナ管理の基本単位である。
- Deployment
- 実行するPodの数とそのPodの定義テンプレートを含むリソース。複数のPodを管理する為に使用する。
- Pod
Podの定義例
nginxコンテナを実行するPodの定義
apiVersion: v1 kind: Pod metadata: name: nginx spec: cantainers: - name: nginx image: nginx:1.15.7 ports: - containerPort: 80
Deploymentの定義例
ngixコンテナを実行するPodを3個起動する定義
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
コンテナを起動してみる
上記Deploymentの定義を記述したマニュフェストファイルをdeployment.yaml
として保存する。
kubectl apply
コマンドを実行してKubenetesにマニフェストファイルの内容を実行する。
kubectl apply -f deployment.yaml
kubectl get pods
コマンドを実行してKubenetesのクラスタ上にPodが起動しているかを確認する。
下記のような結果が返って来れば実行成功!
NAME READY STATUS RESTARTS AGE nginx-deployment-6dd86d77d-5sgtm 1/1 Running 0 100m nginx-deployment-6dd86d77d-cphxc 1/1 Running 0 100m nginx-deployment-6dd86d77d-k4kkd 1/1 Running 0 100m
Podと通信してみる
Deploymentを用いてPodを起動し、コンテナを建てられたので実際に通信してみる。
- Word List
- Service
- 複数のPodへの負荷分散を実現する為のリソース
- Serviceの定義を元にロードバランシングできる
- 複数のPodへの負荷分散を実現する為のリソース
- Service
Serviceの定義例
先程のngixコンテナを実行するPodへポート8080への通信をPodのポート80へ転送する定義
apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 8080 targetPort: 80
Deploymentの登録と同様に、上記Serviceの定義を記述したマニュフェストファイルをservice.yaml
として保存し、kubectl apply
コマンドを実行してKubenetesにマニフェストファイルの内容を実行する。
kubectl apply -f service.yaml
kubectl get service
コマンドを実行してServiceの状態を確認する。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20h nginx-service LoadBalancer 10.105.91.94 localhost 8080:31494 TCP 102m
nginx-serviceがlocalhost:8080で待ち構えている事が分かる。
実際にhttp://localhost:8080へアクセスし、nginxの標準ページが表示されればService経由でのPodとの通信が成功!
感想
Docker for MacでKubernetesがサポートされている為、とても簡単にHello worldができ、コンテナの複数起動&ロードバランシングもとても簡単に行えた。
更に触れ、実用的なメリットも学んでいきたい。