【k8s】Kubernetes ~ 入門編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/04/27/224624
https://dk521123.hatenablog.com/entry/2020/05/01/000000

の続き。

今回は、ローカルで Kubernetes を使って nginx を立ち上げる。

目次

【1】今回のやること
【2】前提条件
【3】構築手順
 1)Minikubeを起動する
 2)Deploymentを作成する
 3)Podを確認する
 4)Service を作成する

【1】今回のやること

Kubernetes で nginx を立ち上げてみる

【2】前提条件

* Kubernetes の環境構築は行われていること
 => 以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2020/05/01/000000

【3】構築手順

1)Minikube(Cluster)を起動する

* クラスタ は、Kubernetes の実行環境で、
 制御サーバである「マスター(Master Node)」と
 実行サーバである複数台の「ノード(Node)」から構成
 => minikube では、1台のホストに「マスター」と「ノード」が同居

コマンド例

# Minikube を起動
$ minikube start

# Minikube の稼働状況を確認
$ minikube status

# ダッシュボードを起動
$ minikube dashboard
🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...
🎉  Opening http://127.0.0.1:46631/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
👉  http://127.0.0.1:46631/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

# minikube dashboard --url

ダッシュボード
https://minikube.sigs.k8s.io/docs/handbook/dashboard/

1)Pod

* Pod は、1つ以上のコンテナから構成された最小単位

[0] 定義ファイル (マニフェストファイル) 作成

apiVersion: v1
kind: Pod
metadata:
  name: nginx-nod1
spec:
  containers:
    - name: nginx
      image: nginx:1.20.0

[1] Podを作成

# YAMLファイルに基づいてPodを作成
$ kubectl apply -f pod1.yaml
pod/nginx-nod1 created

[2] pod の作成確認

# Podの一覧表示
kubectl get pod

# Podに関する情報を表示
kubectl describe pod nginx-nod1

2)Deployment

* Deployment は、Kubernetes で管理するアプリケーションの単位

[0] 定義ファイル (マニフェストファイル) 作成

* 定義ファイルの記述した内容に従って Pod を作成する
* nginx-deployment.yaml を作成
 => 作成後、以下[1]~[3]を実行する。

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.10
        ports:
        - containerPort: 80

[1] Deploymentを作成

# YAMLファイルに基づいてDeploymentを作成
kubectl apply -f ./nginx-deployment.yaml

# 補足:コマンドでの作成
# kubectl create deployment nginx-deployment --image=docker.io/nginx:1.17.10

[2] deployment の作成確認

# Deployment の一覧表示
kubectl get deployments

# Deploymentに関する情報を表示
kubectl describe deployment nginx-deployment

補足:deployment の削除

kubectl delete deployment nginx-deployment

3)Podを確認する

* Deployment が作成されると、アプリケーションを実行するノードが
 自動的にスケジューリングされ実行される
 => この実行の単位を「Pod」と呼ぶ

[1] Pod の作成確認

kubectl get pods

# Deploymentによって作成されたPodを一覧表示
kubectl get pods -l app=nginx

実験

kubectl scale deployments/nginx-deployment --replicas=4

kubectl get pods

4)Service を作成する

* Deploymentを外部に公開するには、「Service」を作成する必要がある
* Service の公開方法には以下の通り。
# 公開方法 説明
1 ClusterIP クラスター内部のIPで公開。クラスター内部からのみアクセス可能
2 NodePort NATを使用して公開。クラスター外部からのアクセスが可能
3 LoadBalancer ロードバランサで公開。Minikubeでは未サポート
4 ExternalName FQDN と Kube-DNS を用いて公開

[0] 設定ファイル作成

* nginx-service.yaml を作成
 => 作成後、以下[1]~[3]を実行する。

nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
    - name: http
      port: 8080
      targetPort: 80

[1] serviceを作成

kubectl apply -f ./nginx-service.yaml

[2] service の作成確認

kubectl get services

[3] Node経由で公開されているserviceにアクセスする

minikube service nginx

https://kubernetes.io/ja/docs/setup/learning-environment/minikube/#%e3%82%af%e3%83%a9%e3%82%b9%e3%82%bf%e3%83%bc%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86

参考文献

https://qiita.com/joe_hirata/items/0c4073f2cc39027d1c32
公式サイト
https://kubernetes.io/ja/docs/tutorials/hello-minikube/
https://kubernetes.io/ja/docs/tasks/run-application/run-stateless-application-deployment/

関連記事

Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
KubernetesWindows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
KubernetesLinux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2024/01/02/005053
Kubernetes ~ MicroK8s / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2024/03/10/230329
Kubernetes ~ 基本編 / Pod ~
https://dk521123.hatenablog.com/entry/2024/03/16/111336
Kubernetes ~ 基本編 / minikube ~
https://dk521123.hatenablog.com/entry/2023/05/07/214515
Kubernetes ~ 基本編 / kubectlコマンド ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
Kubernetes ~ 基本編 / kubeconfigファイル ~
https://dk521123.hatenablog.com/entry/2023/05/24/211803
Kubernetes ~ 基本編 / Helm ~
https://dk521123.hatenablog.com/entry/2023/05/11/000840
Kubernetes ~ Namespace ~
https://dk521123.hatenablog.com/entry/2024/10/25/000712
KubernetesKubernetes Dashboard
https://dk521123.hatenablog.com/entry/2023/05/27/144144
Amazon EKS ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/02/23/000000
Amazon EKS ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/10/220241
Apache Flink ~ 環境構築編 / Kubernetes
https://dk521123.hatenablog.com/entry/2023/05/09/235256