Kubertenes なんか難しいですよね。
クラスター、ポッド、サービス、ノード、レプリカセット???
macOS 上で、とりあえず動かしてみて Kubernetes の雰囲気をつかみましょう。
macOS Venture 13.1 (Apple Silicon)で確認済み。
Docker Desktop
まず、Docker Desktop for Mac をインストールしてください。
Mac に Docker Desktop をインストール
https://docs.docker.jp/docker-for-mac/install.html
インストール後、ターミナルにて以下のコマンドが使えるはずです。
% kubectl version --short Client Version: v1.25.2 Kustomize Version: v4.5.7 Unable to connect to the server: EOF
以下の Enable Kubernetes を有効化します。
有効化に成功すると Server Version が表示されるようになります。
Client Version: v1.25.2 Kustomize Version: v4.5.7 Server Version: v1.25.2
Deployment
以下のファイルを作成してください。
deployment.yml
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:latest
ports:
- containerPort: 80
以下のように実行します
% kubectl apply -f deployment.yml
Replica 数が3なので、pod が3つできています。
% kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-6bd4f444d6-h98vq 1/1 Running 0 29s nginx-deployment-6bd4f444d6-m8dsc 1/1 Running 0 29s nginx-deployment-6bd4f444d6-sckdx 1/1 Running 0 29s
pod はできましたが、サービスがないので外部からアクセスできません。
Service
以下のファイルを作成してください。
service.yml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 8080
targetPort: 80
以下のように実行します
% kubectl apply -f service.yml
nginx-service が増えました。
kubernetes というのは元からあるサービスです。
% kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1443/TCP 24m nginx-service LoadBalancer 10.101.206.174 localhost 8080:31336/TCP 10s
表示確認
ブラウザで、
Localhost:8080 にアクセスすると nginx のページが表示されるはずです。
Rolling Update
deployment_httpd.yml
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: httpd:latest
ports:
- containerPort: 80
以下のように実行します
% kubectl apply -f deployment_httpd.yml
pod 自動的にが入れ替わっています
% kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-7c568c4f9c-5hzhm 1/1 Running 0 6s nginx-deployment-7c568c4f9c-8g747 1/1 Running 0 15s nginx-deployment-7c568c4f9c-dpkhz 1/1 Running 0 5s
ブラウザで、
Localhost:8080 にアクセスすると apache のページが表示されるはずです。
参考文献
メルカリ、プルリクエストをトリガーにKubernetesでテスト環境を作成するOSS「KubeTempura」を公開 – 2022/4/12
https://codezine.jp/article/detail/15810
巨大モノリスをKubernetesに移行してシングルクラスタ運用にするためにどうしたか – 2021/3/3
https://engineering.mercari.com/blog/entry/20210302-move-monolith-into-kube
コメント