MacのローカルでKubernetesのコンテナを実行する

2023-02-25

環境構築

Docker for Macをインストールする。

kindkubectlをインストールする。

kind はKubernetesをローカルでテストしたりすることができるツール。

kubectl はKubernetesのコマンドラインツール。

インストール

shell
1brew install kind
2brew install kubectl

確認

shell
1kind version
2kubectl version --short

kindでKubernetesクラスタを作成

shell
1kind create cluster --image docker.io/kindest/node:v1.26.0

Kubernetesノードの一覧確認

shell
1kubectl get node
2NAME STATUS ROLES AGE VERSION
3kind-control-plane Ready control-plane 22m v1.26.0

マニフェスト

nginxコンテナを作成したクラスタにデプロイしていきます。

Deploymentリソースのマニフェスト

Kubernetesでコンテナをデプロイするにはマニフェストファイルを作成する必要がある。

myapp.yaml

yaml
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: myapp
5spec:
6 replicas: 1
7 selector:
8 matchLabels:
9 app: myapp
10 template:
11 metadata:
12 labels:
13 app: myapp
14 spec:
15 containers:
16 - image: docker.io/nginx:1.23
17 name: nginx
18 env:
19 - name: MY_ENV
20 valueFrom:
21 secretKeyRef:
22 name: myapp-secret
23 key: MY_ENV
24 volumeMounts:
25 - name: myapp-config
26 mountPath: /etc/nginx/templates
27 volumes:
28 - name: myapp-config
29 configMap:
30 name: myapp-config
31

ConfigMapリソースのマニフェストファイル

Kubernetesで設定情報を扱うにはConfigMapリソースを使う

myapp-config.yaml

yaml
1kind: ConfigMap
2metadata:
3 name: myapp-config
4data:
5 default.conf.template: |
6 server {
7 location / {
8 return 200 'Hello $MY_ENV';
9 add_header Content-Type text/plain;
10 }
11 }

docker.io/nginxイメージには/etc/nginx/templates*.templateの名前で設定ファイルのテンプレートを 配置すると、テンプレートに含まれる環境変数をその値で変換し、/etc/nginx/conf.dに配置する。

ConfigMapを/etc/nginx/templatesにマウントするように変更している。

Secretリソースのマニフェストファイル

Kubernetesで秘匿情報を扱う場合はSecretリソースを使う。

Secretリソースのdataフィールドに値をBase64エンコードして設定する。

myapp-secret.yaml

yaml
1apiVersion: v1
2kind: Secret
3metadata:
4 name: myapp-secret
5data:
6 MY_ENV: a3ViZXJuZXRlcw==

Secretリソースのマニフェストの管理

  • パスワードのついた別の保管庫に保存する
  • Sealed Secrets などを利用してSecretリソースを暗号化する
  • External Secrets Operator などを利用して、外部のシークレットストアと連携する。

クラスタに適用する

以下のコマンドでクラスタにPodの作成、変更ができる。

shell
1kubectl apply -f myapp-config.yaml -f myapp.yaml -f myapp-secret.yaml

リソースの状況確認

Deploymentリソースの状況確認

shell
1kubectl get deployments

作成したPodを確認

shell
1kubectl get pods

podのログ確認

shell
1kubectl logs [Pod Name]

PodにHTTPでアクセスする

shell
1kubectl port-forward [Pod Name] 8080:80

別ターミナルを開いて確認すると、

Hello kubernetes が出力される。

shell
1curl -s http://127.0.0.1:8080/
2Hello kubernetes

クラスタの削除

shell
1kind delete cluster

Tech Blog

avatar

ソフトウェアエンジニア。1989年生まれ大阪府岸和田市在住のフリーランス。PHP、バックエンド開発が得意。テニス、フットサル、だんじり、ケツメイシ、競馬、プログラミングが好き!最近はWebフロントエンド沼にハマってます!

Copyright © 2023. Junpeko5's Tech Blog