ラベル Microk8s の投稿を表示しています。 すべての投稿を表示
ラベル Microk8s の投稿を表示しています。 すべての投稿を表示

2022年4月30日土曜日

Kubernetes python clientでMicrok8sの永続ボリュームを削除する

以下のようなKubernetes python clientサンプルプログラムでMicrok8sの永続ボリュームを削除することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムで永続ボリュームを削除することが出来ます。
delete-pv.py
from kubernetes import config, client
from kubernetes.client.exceptions import ApiException

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  namespace = 'default'
  pv_name = 'local-httpd-pv'
  # 永続ボリュームの削除
  try:
    api.delete_persistent_volume(pv_name)
  except ApiException as ex:
    print(ex)

・実行コマンド
python3 delete-pv.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年4月29日金曜日

Kubernetes python clientでMicrok8sの永続ボリューム要求を削除する

以下のようなKubernetes python clientサンプルプログラムでMicrok8sの永続ボリューム要求を削除することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムで永続ボリューム要求を削除することが出来ます。
delete-pvc.py
from kubernetes import config, client
from kubernetes.client.exceptions import ApiException

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  namespace = 'default'
  pvc_name = 'local-httpd-pvc'
  # 永続ボリューム要求の削除
  try:
    api.delete_namespaced_persistent_volume_claim(pvc_name, namespace)
  except ApiException as ex:
    print(ex)

・実行コマンド
python3 delete-pvc.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年4月28日木曜日

Kubernetes python clientでMicrok8sのServiceを削除する

以下のようなKubernetes python clientサンプルプログラムでMicrok8sのServiceを削除することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムでServiceを削除することが出来ます。
delete-service.py
from kubernetes import config, client
from kubernetes.client.exceptions import ApiException

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  namespace = 'default'
  service_name = 'httpd-service'
  # Serviceの削除
  try:
    api.delete_namespaced_service(service_name, namespace)
  except ApiException as ex:
    print(ex)

・実行コマンド
python3 delete-service.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年4月27日水曜日

Kubernetes python clientでMicrok8sの永続ボリューム/永続ボリューム要求/Deployment/Serviceを作成する

以下のようなKubernetes python clientサンプルプログラムでMicrok8sの永続ボリューム/永続ボリューム要求/Deployment/Serviceを作成することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムでMicrok8sの永続ボリューム/永続ボリューム要求/Deployment/Serviceを作成することが出来ます。ローカルストレージの永続ボリュームを使用するApache Httpdをデプロイ&サービス作成しています。
deploy-httpd.py
from kubernetes import config, client
from kubernetes.client.exceptions import ApiException

# 永続ボリュームの作成
def create_pv(api):
  pv = client.V1PersistentVolume()
  # 永続ボリューム名
  pv.metadata = client.V1ObjectMeta(
    name="local-httpd-pv"
  )
  pv.spec = client.V1PersistentVolumeSpec(
    # 容量
    capacity = {"storage":"50Mi"},
    # local volume
    local = client.V1LocalVolumeSource(path="/var/mywww/html"),
    # アクセスモード
    access_modes = [
      "ReadOnlyMany"
    ],
    # node affinityの設定
    node_affinity = client.V1VolumeNodeAffinity(
      required = client.V1NodeSelector(
        node_selector_terms = [
          client.V1NodeSelectorTerm(
            match_expressions = [
              client.V1NodeSelectorRequirement(
                key = "kubernetes.io/hostname",
                operator = "In",
                values = ["ub2004server1"] # 適宜ホスト名を変更してください
              )
            ]
          )
        ]
      )
    ),
    # storage class設定
    storage_class_name = "local-storage",
  )
  # 永続ボリュームを作成
  api.create_persistent_volume(pv)

# 永続ボリューム要求の作成
def create_pvc(api, namespace):
  pv = client.V1PersistentVolumeClaim()
  pv.metadata = client.V1ObjectMeta(
    name="local-httpd-pvc"
  )
  pv.spec = client.V1PersistentVolumeClaimSpec(
    access_modes = [
      "ReadOnlyMany"
    ],
    resources = client.V1ResourceRequirements(
      requests = {"storage": "50Mi"}
    ),
    storage_class_name = "local-storage",
  )
  api.create_namespaced_persistent_volume_claim(namespace, pv)

# Deploymentの作成
def create_deployment(api, namespace):
  dp = client.V1Deployment()
  dp.metadata = client.V1ObjectMeta(
    name="httpd-deployment",
    labels={"app":"myhttpd"}
  )
  dp.spec = client.V1DeploymentSpec(
    replicas = 1,
    selector = client.V1LabelSelector(
      match_labels = {"app":"myhttpd"}
    ),
    template = client.V1PodTemplateSpec(
      metadata = client.V1ObjectMeta(
        labels={"app":"myhttpd"}
      ),
      spec = client.V1PodSpec(
        containers = [
          client.V1Container(
            name = "myhttpd",
            image = "httpd:2.4-alpine",
            ports = [
              client.V1ContainerPort(container_port=80)
            ],
            volume_mounts = [
              client.V1VolumeMount(
                name = "documentroot",
                mount_path = "/usr/local/apache2/htdocs"
              )
            ]
          )
        ],
        volumes = [
          client.V1Volume(
            name = "documentroot",
            persistent_volume_claim = client.V1PersistentVolumeClaimVolumeSource(
              claim_name = "local-httpd-pvc"
            )
          )
        ]
      )
    )
  )
  api.create_namespaced_deployment(namespace, dp)

# Serviceの作成
def create_service(api, namespace):
  sv = client.V1Service()
  sv.metadata = client.V1ObjectMeta(
    name="httpd-service"
  )
  sv.spec = client.V1ServiceSpec(
    selector = {"app":"myhttpd"},
    type = "LoadBalancer",
    external_i_ps = ["192.168.1.10"], # 適宜IPアドレスを変更してください
    ports = [
      client.V1ServicePort(
        port = 8080,
        target_port = 80,
        protocol = "TCP"
      )
    ]
  )
  api.create_namespaced_service(namespace, sv)



# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  namespace = 'default'
  # 永続ボリュームの作成
  try:
    create_pv(api)
  except ApiException as ex:
    if ex.reason == 'Conflict':
      print("already exists.")
    else:
      print(ex)

  # 永続ボリューム要求の作成
  try:
    create_pvc(api, namespace)
  except ApiException as ex:
    if ex.reason == 'Conflict':
      print("already exists.")
    else:
      print(ex)

  # Deploymentの作成
  try:
    apps_api = client.AppsV1Api(api_client)
    create_deployment(apps_api, namespace)
  except ApiException as ex:
    if ex.reason == 'Conflict':
      print("already exists.")
    else:
      print(ex)

  # Serviceの作成
  try:
    create_service(api, namespace)
  except ApiException as ex:
    if ex.reason == 'Conflict':
      print("already exists.")
    else:
      print(ex)

・実行コマンド
python3 deploy-httpd.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

・kubectlを使用して同様のデプロイを行う場合は、以下のページを参照してください。
Microk8sでlocal永続ボリュームを使用するApache Httpdをデプロイする

2022年4月26日火曜日

Kubernetes python clientでMicrok8sのNodeを列挙する

以下のようなKubernetes python clientサンプルプログラムでMicrok8sのNodeを列挙することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムでNodeを列挙することが出来ます。
list-node.py
from kubernetes import config, client

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  # Nodeの列挙
  nodes = api.list_node(watch=False)
  for node in nodes.items:
    # node名を表示
    print("node name: {}".format(node.metadata.name))
    # conditionsを表示
    for condition in node.status.conditions:
      if condition.status == 'True':
        print("  condition: {}".format(condition.type))
    # address
    for address in node.status.addresses:
      print("  address:{}".format(address))

・実行コマンド
python3 list-node.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年4月25日月曜日

Kubernetes python clientでMicrok8sの永続ボリューム要求を列挙する

以下のようなKubernetes python clientサンプルプログラムでMicrok8sの永続ボリューム要求(Persistent volume claim)を列挙することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムで永続ボリュームを列挙することが出来ます。
list-pvc.py
from kubernetes import config, client

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  # Persistent Volume Claimの列挙
  pvcs = api.list_persistent_volume_claim_for_all_namespaces(watch=False)
  for pvc in pvcs.items:
    # Persistent volume Claim名を表示
    print("persistent volume claim name: {}".format(pvc.metadata.name))
    # phaseを表示
    print("  phase: {}".format(pvc.status.phase))
    # access mode
    for access_mode in pvc.spec.access_modes:
      print("  access mode:{}".format(access_mode))
    # 容量を表示
    print("  capacity: {}".format(pvc.status.capacity))
    # Persistent volume nameを表示
    print("  persistent volume name: {}".format(pvc.spec.volume_name))

・実行コマンド
python3 list-pvc.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年4月24日日曜日

Kubernetes python clientでMicrok8sの永続ボリュームを列挙する

以下のようなKubernetes python clientサンプルプログラムでMicrok8sの永続ボリュームを列挙することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムで永続ボリュームを列挙することが出来ます。
list-pv.py
from kubernetes import config, client

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  # Persistent Volumeの列挙
  volumes = api.list_persistent_volume(watch=False)
  for volume in volumes.items:
    # volume名を表示
    print("volume name: {}".format(volume.metadata.name))
    # phaseを表示
    print("  phase: {}".format(volume.status.phase))
    # access mode
    for access_mode in volume.spec.access_modes:
      print("  access mode:{}".format(access_mode))
    # 容量を表示
    print("  capacity: {}".format(volume.spec.capacity))
    # storage class nameを表示
    print("  storage class name: {}".format(volume.spec.storage_class_name))
    # local volume path
    if volume.spec.local is not None:
      print("  local volume path: {}".format(volume.spec.local.path))

・実行コマンド
python3 list-pv.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年4月23日土曜日

Microk8sとKubernetes python clientでServiceを列挙する

以下のようなMicrok8sとKubernetes python clientサンプルプログラムでServiceを列挙することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムでServiceを列挙することが出来ます。
list-service.py
from kubernetes import config, client

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  # serviceの列挙
  services = api.list_namespaced_service('default', watch=False)
  for service in services.items:
    # service名を表示
    print("service name: {}".format(service.metadata.name))
    print("type: {}".format(service.spec.type))
    # ポート
    for port in service.spec.ports:
      print("  port: {} -> target port: {}".format(port.port, port.target_port))

・実行コマンド
python3 list-service.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年4月22日金曜日

Kubernetes python clientでMicrok8sのPodを列挙する

以下のようなKubernetes python clientサンプルプログラムでMicrok8sのPodを列挙することが出来ます。

実行手順

1. 実行環境の構築・設定
以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する

2. サンプルプログラムの作成と実行
以下のサンプルプログラムでPodを列挙することが出来ます。
list-pod.py
from kubernetes import config, client

# configを読み込み
cfg = config.load_kube_config()

namespace = 'default'
# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  # podの列挙
  pods = api.list_namespaced_pod(namespace, watch=False)
  for pod in pods.items:
    # print(type(pod))
    print("-----------")
    # pod名とphase
    print("{}:{}".format(pod.metadata.name, pod.status.phase))
    # pod内のコンテナ
    for container in pod.spec.containers:
      # イメージ名
      print("  image: {}".format(container.image))
      # ポート
      if container.ports is not None:
        for port in container.ports:
          print("    container port: {}".format(port.container_port))
          print("    host port: {}".format(port.host_port))
    # restart policy
    print("restart policy: {}".format(pod.spec.restart_policy))
    # スケジューラ名
    print("scheduler_name: {}".format(pod.spec.scheduler_name))
    # サービスアカウント
    print("service_account_name: {}".format(pod.spec.service_account_name))
    # ボリューム
    for volume in pod.spec.volumes:
      # ボリューム名
      print("  volume name: {}".format(volume.name))
      # Persistent Volume Claim
      print("  PVC: {}".format(volume.persistent_volume_claim))

・実行コマンド
python3 list-pod.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年4月10日日曜日

Microk8sでPyMySQLとipython-sqlをインストールしたJupyterLabをデプロイする

Microk8sでPyMySQLとipython-sqlをインストールしたJupyterLabをデプロイするには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/nb_jovyan
sudo mkdir -p /var/start-notebook.d

sudo chown 1000:100 /var/nb_jovyan

cat << EOF | sudo tee /var/start-notebook.d/install_packages.sh
conda install -c anaconda pymysql -y
conda install -c conda-forge ipython-sql -y
EOF
sudo chmod +x /var/start-notebook.d/install_packages.sh

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※jovyan用の永続ボリューム
cat << EOF > local-jovyan-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-jovyan-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/nb_jovyan
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-jovyan-pv.yml

※スタートアップスクリプト用の永続ボリューム
cat << EOF > local-startnb-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-startnb-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/start-notebook.d
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-startnb-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※jovyan用の永続ボリューム
cat << EOF > local-jovyan-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-jovyan-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-jovyan-pv
EOF

microk8s kubectl apply -f ./local-jovyan-pvc.yml

※スタートアップスクリプト用の永続ボリューム要求
cat << EOF > local-startnb-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-startnb-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-startnb-pv
EOF

microk8s kubectl apply -f ./local-startnb-pvc.yml

4. Deploymentの作成
以下のコマンドでjupyterのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > jupyter-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jupyter-deployment
  labels:
    app: jupyter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jupyter
  template:
    metadata:
      labels:
        app: jupyter
    spec:
      containers:
      - name: jupyter
        image: jupyter/scipy-notebook:latest
        ports:
        - containerPort: 8888
        env:
        - name: JUPYTER_TOKEN
          value: "jupyter"
        - name: DOCKER_STACKS_JUPYTER_CMD
          value: "lab"
        volumeMounts:
        - name: nb-jovyan
          mountPath: /home/jovyan/work
        - name: startnb
          mountPath: /usr/local/bin/start-notebook.d
      volumes:
      - name: nb-jovyan
        persistentVolumeClaim:
          claimName: local-jovyan-pvc
      - name: startnb
        persistentVolumeClaim:
          claimName: local-startnb-pvc
EOF

microk8s kubectl apply -f ./jupyter-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > jupyter-service.yml
apiVersion: v1
kind: Service
metadata:
  name: jupyter-service
spec:
  selector:
    app: jupyter
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8888
EOF

microk8s kubectl apply -f ./jupyter-service.yml

6. 動作確認
ブラウザからhttp://<ホスト名:8080/?token=jupyter にアクセスします。
ipython-sqlをインストールしているのでSQLマジックセルでSQLを実行できるか確認します。
以下のusername, password, dbhost, dbnameを書き換えて、MariaDBデータベースに接続/実行確認します。
%load_ext sql
dsl = 'mysql+pymysql://username:password@dbhost:3306/dbname'
%sql $dsl
%%sql
select version();

2022年4月4日月曜日

Microk8sで世界銀行のデータを取得できるwbdataをインストールしたJupyterLabをデプロイする

Microk8sで世界銀行のデータを取得できるwbdataをインストールしたJupyterLabをデプロイするには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/nb_jovyan
sudo mkdir -p /var/start-notebook.d

sudo chown 1000:100 /var/nb_jovyan

cat << EOF | sudo tee /var/start-notebook.d/install_packages.sh
pip install -U wbdata
EOF
sudo chmod +x /var/start-notebook.d/install_packages.sh

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※jovyan用の永続ボリューム
cat << EOF > local-jovyan-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-jovyan-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/nb_jovyan
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-jovyan-pv.yml

※スタートアップスクリプト用の永続ボリューム
cat << EOF > local-startnb-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-startnb-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/start-notebook.d
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-startnb-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※jovyan用の永続ボリューム
cat << EOF > local-jovyan-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-jovyan-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-jovyan-pv
EOF

microk8s kubectl apply -f ./local-jovyan-pvc.yml

※スタートアップスクリプト用の永続ボリューム要求
cat << EOF > local-startnb-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-startnb-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-startnb-pv
EOF

microk8s kubectl apply -f ./local-startnb-pvc.yml

4. Deploymentの作成
以下のコマンドでjupyterのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > jupyter-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jupyter-deployment
  labels:
    app: jupyter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jupyter
  template:
    metadata:
      labels:
        app: jupyter
    spec:
      containers:
      - name: jupyter
        image: jupyter/scipy-notebook:latest
        ports:
        - containerPort: 8888
        env:
        - name: JUPYTER_TOKEN
          value: "jupyter"
        - name: DOCKER_STACKS_JUPYTER_CMD
          value: "lab"
        volumeMounts:
        - name: nb-jovyan
          mountPath: /home/jovyan/work
        - name: startnb
          mountPath: /usr/local/bin/start-notebook.d
      volumes:
      - name: nb-jovyan
        persistentVolumeClaim:
          claimName: local-jovyan-pvc
      - name: startnb
        persistentVolumeClaim:
          claimName: local-startnb-pvc
EOF

microk8s kubectl apply -f ./jupyter-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > jupyter-service.yml
apiVersion: v1
kind: Service
metadata:
  name: jupyter-service
spec:
  selector:
    app: jupyter
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8888
EOF

microk8s kubectl apply -f ./jupyter-service.yml

6. 動作確認
以下の記事を参考にして、wbdataの動作を確認します。
Jupyterとwbdataで世界銀行の人口データから上位20国を棒グラフ表示する

2022年3月29日火曜日

Kubernetes python clientでMicrok8sのnamespaceを列挙する

Kubernetes python clientでMicrok8sのnamespaceを列挙するには、以下の手順を実行します。

実行手順

1.pipenvのインストール
pipenvをインストール済みでない場合は、以下のコマンドでインストールします。
sudo apt-get -y install python3 python3-pip

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. kubernetes clientをインストールした仮想環境の作成
mkdir -p ./kubernetes-client

cd ./kubernetes-client

pipenv --python 3

pipenv install --skip-lock kubernetes

pipenv shell

3. configファイルの準備
microk8s.config > ~/.kube/config

4. サンプルプログラムの作成と実行
以下のサンプルプログラムでnamespaceを列挙することが出来ます。
list-namespace.py
from kubernetes import config, client

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  # namespaceの列挙
  namespaces = api.list_namespace(watch=False)
  for namespace in namespaces.items:
    # namespaceとstatusを表示
    print("{}:{}".format(namespace.metadata.name, namespace.status.phase))

・実行コマンド
python3 list-namespace.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

2022年3月28日月曜日

Microk8sで同一ポッド内にPostgreSQLとpgwebを配置する(local永続ボリューム使用)

pgwebはPostgreSQLのwebインターフェイスです。Microk8sで同一ポッド内にPostgreSQLとpgwebを配置するには、以下の手順を実行します。PostgreSQLのデータはlocal永続ボリュームに保存します。

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

4. pgwebとPostgrelSQLのDeploymentの作成
以下のコマンドでpgwebとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > pgweb-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgweb-pg-deployment
  labels:
    app: pgweb-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pgweb-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: pgweb-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        - name: POSTGRES_DB
          value: pgweb
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: pgweb
        image: sosedoff/pgweb
        env:
        - name: DATABASE_URL
          value: postgres://postgres:postgres@127.0.0.1:5432/pgweb?sslmode=disable
        ports:
        - containerPort: 8081
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

microk8s kubectl apply -f ./pgweb-pg-deployment.yml

5. pgwebとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > pgweb-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: pgweb-pg-service
spec:
  selector:
    app: pgweb-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx   # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8081
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./pgweb-pg-service.yml

ブラウザから以下のURLからpgwebにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/

2022年3月27日日曜日

Microk8sで同一ポッド内にPostgreSQLとnocodbを配置する(local永続ボリューム使用)

nocodbはコード無しでデータベースアプリケーションを作成する事のできるソフトウェアです。Microk8sで同一ポッド内にPostgreSQLとnocodbを配置するには、以下の手順を実行します。PostgreSQLのデータはlocal永続ボリュームに保存します。

〇nocodbの画面

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

4. nocodbとPostgrelSQLのDeploymentの作成
以下のコマンドでnocodbとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > nocodb-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nocodb-pg-deployment
  labels:
    app: nocodb-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nocodb-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nocodb-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        - name: POSTGRES_DB
          value: nocodb
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: nocodb
        image: nocodb/nocodb:latest
        env:
        - name: NC_DB
          value: pg://127.0.0.1:5432?u=postgres&p=mypostgres&d=nocodb
        - name: NC_AUTH_JWT_SECRET
          value: 569a1821-0a93-45e8-87ab-eb857f20a010
        ports:
        - containerPort: 8080
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

microk8s kubectl apply -f ./nocodb-pg-deployment.yml

5. nocodbとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > nocodb-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nocodb-pg-service
spec:
  selector:
    app: nocodb-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./nocodb-pg-service.yml

ブラウザから以下のURLからnocodbにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/
最初にSuper adminとなるユーザの情報を入力します。

2022年3月26日土曜日

Microk8sで同一ポッド内にMariaDBとnocodbを配置する(local永続ボリューム使用)

Microk8sで同一ポッド内にMariaDBとnocodbを配置するには、以下の手順を実行します。MariaDBのデータはlocal永続ボリュームに保存します。

〇nocodbの画面

実行手順

1. MariaDBデータ格納用ディレクトリを作成
以下のコマンドでMariaDBデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/lib/mymariadb

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-mariadb-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mariadb-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/lib/mymariadb
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mariadb-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-mariadb-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mariadb-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mariadb-pv
EOF

microk8s kubectl apply -f ./local-mariadb-pvc.yml

4. nocodbとMariaDBのDeploymentの作成
以下のコマンドでnocodbとmariadbを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > nocodb-mariadb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nocodb-mariadb-deployment
  labels:
    app: nocodb-mariadb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nocodb-mariadb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nocodb-mariadb
    spec:
      containers:
      - name: mymariadb
        image: mariadb:10.7-focal
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mymariadb
        - name: MYSQL_DATABASE
          value: nocodb
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mariadb-data
          mountPath: /var/lib/mysql
      - name: nocodb
        image: nocodb/nocodb:latest
        env:
        - name: NC_DB
          value: mysql2://127.0.0.1:3306?u=root&p=mymariadb&d=nocodb
        - name: NC_AUTH_JWT_SECRET
          value: 569a1821-0a93-45e8-87ab-eb857f20a010
        ports:
        - containerPort: 8080
      volumes:
      - name: mariadb-data
        persistentVolumeClaim:
          claimName: local-mariadb-pvc
EOF

microk8s kubectl apply -f ./nocodb-mariadb-deployment.yml

5. nocodbとMariaDBのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > nocodb-mariadb-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nocodb-mariadb-service
spec:
  selector:
    app: nocodb-mariadb
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

microk8s kubectl apply -f ./nocodb-mariadb-service.yml

ブラウザから以下のURLからnocodbにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/
最初にSuper adminとなるユーザの情報を入力します。

2022年3月25日金曜日

Microk8sで同一ポッド内にPostgreSQLとMetabaseを配置する

Metabaseはオープンソースのデータ解析・可視化ツールです。Microk8sで同一ポッド内にPostgreSQLとMetabaseを配置するには、以下の手順を実行します。

〇Metabaseの画面

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/pgdata

sudo mkdir -p /var/metabase

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

※Metabase用
cat << EOF > local-metabase-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-metabase-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/metabase
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-metabase-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※PostgreSQL用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

※Metabase用
cat << EOF > local-metabase-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-metabase-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-metabase-pv
EOF

microk8s kubectl apply -f ./local-metabase-pvc.yml

4. MetabaseとPostgrelSQLのDeploymentの作成
以下のコマンドでMetabaseとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > metabase-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metabase-pg-deployment
  labels:
    app: metabase-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: metabase-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: metabase-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: metabase
        - name: POSTGRES_PASSWORD
          value: mypostgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: metabase
        image: metabase/metabase
        env:
        - name: MB_DB_FILE
          value: /metabase-data/metabase.db
        - name: MB_DB_TYPE
          value: postgres
        - name: MB_DB_DBNAME
          value: metabase
        - name: MB_DB_PORT
          value: "5432"
        - name: MB_DB_USER
          value: postgres
        - name: MB_DB_PASS
          value: mypostgres
        - name: MB_DB_HOST
          value: 127.0.0.1
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: metabase-data
          mountPath: /metabase-data
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: metabase-data
        persistentVolumeClaim:
          claimName: local-metabase-pvc
EOF

microk8s kubectl apply -f ./metabase-pg-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > metabase-service.yml
apiVersion: v1
kind: Service
metadata:
  name: metabase-service
spec:
  selector:
    app: metabase-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 3000
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./metabase-service.yml

ブラウザからhttp://<ホスト名:8080 にアクセスします。

言語、ユーザアカウント情報を入力して、「3.データを追加する」で以下の様に入力します。
データベースのタイプ: PostgreSQL
名前: pg
ホスト: localhost
ポート: 5432
データベース名: metabase
ユーザ: postgres
パスワード: mypostgres

〇Metabaseの画面

2022年3月24日木曜日

Microk8sで同一ポッド内にMariaDBとMetabaseを配置する

Metabaseはオープンソースのデータ解析・可視化ツールです。Microk8sで同一ポッド内にMariaDBとMetabaseを配置するには、以下の手順を実行します。

〇Metabaseの画面

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/mymariadb

sudo mkdir -p /var/metabase

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※MariaDBデータ用
cat << EOF > local-mariadb-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mariadb-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mymariadb
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mariadb-pv.yml

※Metabase用
cat << EOF > local-metabase-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-metabase-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/metabase
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-metabase-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※MariaDBデータ用
cat << EOF > local-mariadb-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mariadb-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mariadb-pv
EOF

microk8s kubectl apply -f ./local-mariadb-pvc.yml

※Metabase用
cat << EOF > local-metabase-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-metabase-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-metabase-pv
EOF

microk8s kubectl apply -f ./local-metabase-pvc.yml

4. MetabaseとMariaDBのDeploymentの作成
以下のコマンドでMetabaseとMariaDBを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > metabase-mariadb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metabase-mariadb-deployment
  labels:
    app: metabase-mariadb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: metabase-mariadb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: metabase-mariadb
    spec:
      containers:
      - name: mymariadb
        image: mariadb:10.7-focal
        args: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mymariadb
        - name: MYSQL_DATABASE
          value: metabase
        - name: MYSQL_USER
          value: metabase
        - name: MYSQL_PASSWORD
          value: metabase
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mariadb-data
          mountPath: /var/lib/mysql
      - name: metabase
        image: metabase/metabase
        env:
        - name: MB_DB_FILE
          value: /metabase-data/metabase.db
        - name: MB_DB_TYPE
          value: mysql
        - name: MB_DB_DBNAME
          value: metabase
        - name: MB_DB_PORT
          value: "3306"
        - name: MB_DB_USER
          value: metabase
        - name: MB_DB_PASS
          value: metabase
        - name: MB_DB_HOST
          value: 127.0.0.1
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: metabase-data
          mountPath: /metabase-data
      volumes:
      - name: mariadb-data
        persistentVolumeClaim:
          claimName: local-mariadb-pvc
      - name: metabase-data
        persistentVolumeClaim:
          claimName: local-metabase-pvc
EOF

microk8s kubectl apply -f ./metabase-mariadb-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > metabase-service.yml
apiVersion: v1
kind: Service
metadata:
  name: metabase-service
spec:
  selector:
    app: metabase-mariadb
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 3000
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

microk8s kubectl apply -f ./metabase-service.yml
ブラウザからhttp://<ホスト名:8080 にアクセスします。

言語、ユーザアカウント情報を入力して、「3.データを追加する」で以下の様に入力します。
データベースのタイプ: MySQL
名前: mariadb
ホスト: 127.0.0.1
ポート: 3306
データベース名: metabase
ユーザ: metabase
パスワード: metabase

2022年3月23日水曜日

Microk8sでlocal永続ボリュームを使用するMariaDBをデプロイする

Microk8sでlocal永続ボリュームを使用するMariaDBをデプロイするには、以下の手順を実行します。

実行手順

1. MariaDBデータ格納用ディレクトリを作成
以下のコマンドでMariaDBデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/lib/mymariadb

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-mariadb-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mariadb-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/lib/mymariadb
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mariadb-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-mariadb-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mariadb-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mariadb-pv
EOF

microk8s kubectl apply -f ./local-mariadb-pvc.yml

4. Deploymentの作成
以下のコマンドでmariadbのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > mariadb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mariadb-deployment
  labels:
    app: mymariadb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mymariadb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mymariadb
    spec:
      containers:
      - name: mymariadb
        image: mariadb:10.7-focal
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mymariadb
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mariadb-data
          mountPath: /var/lib/mysql
      volumes:
      - name: mariadb-data
        persistentVolumeClaim:
          claimName: local-mariadb-pvc
EOF

microk8s kubectl apply -f ./mariadb-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > mariadb-service.yml
apiVersion: v1
kind: Service
metadata:
  name: mariadb-service
spec:
  selector:
    app: mymariadb
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306
EOF

microk8s kubectl apply -f ./mariadb-service.yml

※接続確認
mariadb -h ※Microk8sをインストールしたホストのIP -uroot -pmymariadb mysql

※MariaDBのクライアントは以下のコマンドでインストールできます。
sudo apt-get -y install mariadb-client

Microk8sでlocal永続ボリュームを使用するClickHouseをデプロイする

Microk8sでlocal永続ボリュームを使用するClickHouseをデプロイするには、以下の手順を実行します。

実行手順

1. ClickHouseデータ格納用ディレクトリを作成
Microk8sホスト上で以下のコマンドを実行してデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/clickhouse-data
sudo chown 101:101 /var/clickhouse-data

sudo mkdir -p /var/clickhouse-logs
sudo chown 101:101 /var/clickhouse-logs

sudo mkdir -p /var/clickhouse-config
sudo chown 101:101 /var/clickhouse-config
cat << EOF | sudo tee -a /var/clickhouse-config/myconfig.xml
<yandex>
    <listen_host>::</listen_host>
    <listen_host>0.0.0.0</listen_host>
    <listen_try>1</listen_try>
</yandex>
EOF
sudo chown 101:101 /var/clickhouse-config/*

sudo mkdir -p /var/clickhouse-users
sudo chown 101:101 /var/clickhouse-users

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
〇データ用
cat << EOF > local-clickhouse-data-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-clickhouse-data-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/clickhouse-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-clickhouse-data-pv.yml

〇ログ用
cat << EOF > local-clickhouse-logs-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-clickhouse-logs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/clickhouse-logs
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-clickhouse-logs-pv.yml

〇設定用
cat << EOF > local-clickhouse-config-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-clickhouse-config-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/clickhouse-config
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-clickhouse-config-pv.yml

〇ユーザ用
cat << EOF > local-clickhouse-users-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-clickhouse-users-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/clickhouse-users
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-clickhouse-users-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
〇データ用
cat << EOF > local-clickhouse-data-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-clickhouse-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-clickhouse-data-pv
EOF

microk8s kubectl apply -f ./local-clickhouse-data-pvc.yml

〇ログ用
cat << EOF > local-clickhouse-logs-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-clickhouse-logs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-clickhouse-logs-pv
EOF

microk8s kubectl apply -f ./local-clickhouse-logs-pvc.yml

〇設定用
cat << EOF > local-clickhouse-config-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-clickhouse-config-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-clickhouse-config-pv
EOF

microk8s kubectl apply -f ./local-clickhouse-config-pvc.yml

〇ユーザ用
cat << EOF > local-clickhouse-users-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-clickhouse-users-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-clickhouse-users-pv
EOF

microk8s kubectl apply -f ./local-clickhouse-users-pvc.yml

4. Deploymentの作成
以下のコマンドでClickHouseのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > clickhouse-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: clickhouse-deployment
  labels:
    app: myclickhouse
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myclickhouse
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: myclickhouse
    spec:
      containers:
      - name: myclickhouse
        image: clickhouse/clickhouse-server
        ports:
        - containerPort: 9000
        - containerPort: 8123
        volumeMounts:
        - name: clickhouse-data
          mountPath: /var/lib/clickhouse
        - name: clickhouse-logs
          mountPath: /val/log/clickhouse-server
        - name: clickhouse-config
          mountPath: /etc/clickhouse-server/config.d
        - name: clickhouse-users
          mountPath: /etc/clickhouse-server/users.d
      volumes:
      - name: clickhouse-data
        persistentVolumeClaim:
          claimName: local-clickhouse-data-pvc
      - name: clickhouse-logs
        persistentVolumeClaim:
          claimName: local-clickhouse-logs-pvc
      - name: clickhouse-config
        persistentVolumeClaim:
          claimName: local-clickhouse-config-pvc
      - name: clickhouse-users
        persistentVolumeClaim:
          claimName: local-clickhouse-users-pvc
EOF

microk8s kubectl apply -f ./clickhouse-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > clickhouse-service.yml
apiVersion: v1
kind: Service
metadata:
  name: clickhouse-service
spec:
  selector:
    app: myclickhouse
  type: LoadBalancer
  externalIPs:
  - 192.168.1.1 # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: native
    protocol: TCP
    port: 9000
    targetPort: 9000
  - name: httpinterface
    protocol: TCP
    port: 8123
    targetPort: 8123
EOF

microk8s kubectl apply -f ./clickhouse-service.yml

6. (クライアント側)clickhouse-clientのインストール(Ubuntu 20.04/Debianなど)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4

echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee -a /etc/apt/sources.list.d/clickhouse.list

sudo apt-get update

sudo apt-get -y install clickhouse-client

7. (クライアント側)サンプルテーブルの作成
※192.168.1.1の部分は適宜、Microk8sのホスト名/IPアドレスに読み替えてください。
clickhouse-client -h 192.168.1.1 --query="CREATE TABLE test (test_date Date, test_id UInt16, test_message String) ENGINE = MergeTree(test_date, (test_id), 8192);"

cat << EOF > /tmp/test.csv
2022-01-01,100,hello world!
2022-01-02,200,test data
EOF

cat /tmp/test.csv | clickhouse-client -h 192.168.1.1 --query="INSERT INTO test FORMAT CSV"

clickhouse-client -h 192.168.1.1 --query="SELECT * FROM test"

8. ブラウザからのアクセス
ブラウザからhttp://<サーバ名またはIPアドレス>:8123/playにアクセスします。

2022年3月22日火曜日

Microk8sで同一ポッド内にMantis Bug TrackerとPostgreSQLを配置する(local永続ボリューム使用)

Microk8sで同一ポッド内にMantis Bug TrackerとPostgreSQLを配置するには、以下の手順を実行します。Mantis Bug Trackerの構成フォルダとPostgreSQLのデータはlocal永続ボリュームに保存します。

〇MantisBTの画面
デフォルトユーザ/パスワードはadministrator/rootです。

実行手順

1. ビルトインレジストリの有効化(※既に実施している場合はスキップしてください)
Microk8sがインストールされているホスト上で以下のコマンドを実行します。
microk8s enable registry:size=50Gi
※registryプラグインが有効化してあるか不明な場合はmicrok8s statusコマンドを実行します。

Dockerがインストールしてあるリモートマシン上で以下のコマンドを実行します。192.168.1.1の部分は、Microk8sのホストのIPに変更してください。
cat << EOF | sudo tee /etc/docker/daemon.json
{
    "insecure-registries" : ["192.168.1.1:32000"]
}
EOF

sudo systemctl restart docker

2. 以下のDockerfileを使用してイメージを作成します
cat << EOF > Dockerfile
FROM alpine:3.15
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php8-apache2 php8-pgsql php8-pdo php8-pdo_pgsql php8-intl php8-mbstring php8-session php8-curl php8-json php8-xml php8-zip php8-tokenizer php8-ctype php8-gd php8-xmlwriter php8-xmlreader php8-dom php8-zlib php8-iconv php8-simplexml php8-fileinfo openssl openrc unzip \
  && rm -rf /var/cache/apk/* \
  && wget https://sourceforge.net/projects/mantisbt/files/mantis-stable/2.25.2/mantisbt-2.25.2.tar.gz \
  && tar xvfz mantisbt-2.25.2.tar.gz \
  && rm -f mantisbt-2.25.2.tar.gz \
  && mv /var/www/localhost/htdocs /var/www/localhost/htdocs.bak \
  && mv mantisbt-2.25.2 /var/www/localhost/htdocs \
  && chown -R apache:apache /var/www/localhost/htdocs \
  && mkdir -p /run/apache2
EXPOSE 80
VOLUME ["/var/www/localhost/htdocs/config"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
EOF

・イメージ作成コマンド ※192.168.1.1の部分はMicrok8sのホストのIPに変更してください。
docker build . -t 192.168.1.1:32000/mantisbtpg:latest

・イメージのタグ付け
docker tag `docker images | grep '192.168.1.1:32000/mantisbtpg' | awk '{print $3}'` 192.168.1.1:32000/mantisbtpg:latest

・イメージをビルトインレジストリにプッシュ
docker push 192.168.1.1:32000/mantisbtpg:latest

・Microk8sのサーバ上で、イメージが登録されたことを確認するには以下のコマンドを実行します。
wget http://192.168.1.1:32000/v2/_catalog -O -

3. Mantis Bug Tracker構成格納/PostgreSQLデータ用ディレクトリを作成
以下のコマンドでMantis Bug Tracker構成格納/PostgreSQLデータ用ディレクトリを作成します。
sudo mkdir -p /var/mantisbt-conf

sudo mkdir -p /var/pgdata

sudo chown 100:101 /var/mantisbt-conf/

4. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※Mantis Bug Tracker用
cat << EOF > local-mantisbt-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mantisbt-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mantisbt-conf
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mantisbt-pv.yml

※PostgreSQL用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

5. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※Mantis Bug Tracker用
cat << EOF > local-mantisbt-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mantisbt-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mantisbt-pv
EOF

microk8s kubectl apply -f ./local-mantisbt-pvc.yml

※PostgreSQL用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

6. Mantis Bug TrackerとPostgreSQLのDeploymentの作成
以下のコマンドでMantis Bug TrackerとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > mantisbt-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mantisbt-pg-deployment
  labels:
    app: mantisbt-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mantisbt-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mantisbt-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: mantisbt
        - name: POSTGRES_USER
          value: mantisbt
        - name: POSTGRES_PASSWORD
          value: mantisbt
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: mantisbt
        image: localhost:32000/mantisbtpg:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - name: mantisbt-conf
          mountPath: /var/www/localhost/htdocs/config
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: mantisbt-conf
        persistentVolumeClaim:
          claimName: local-mantisbt-pvc
EOF

microk8s kubectl apply -f ./mantisbt-pg-deployment.yml

7. Mantis Bug TrackerとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > mantisbt-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: mantisbt-pg-service
spec:
  selector:
    app: mantisbt-pg
  type: LoadBalancer
  externalIPs:
  - 192.168.1.1 # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 80
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./mantisbt-pg-service.yml

8. ブラウザから以下のURLからmantisbtにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/
Installer Optionsで以下の項目を入力する
Type of Database: PostgreSQL
Hostname (for Database Server): 127.0.0.1
Username (for Database): mantisbt
Password (for Database): mantisbt
Database name (for Database): mantisbt