とりあえず動かす kubertenes

kubernetes

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.1                443/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

コメント

タイトルとURLをコピーしました