はじめての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ができ、コンテナの複数起動&ロードバランシングもとても簡単に行えた。
更に触れ、実用的なメリットも学んでいきたい。