Kubernetes

【kubernetes】microk8sをUbuntu22.04へインストールしてnginxのPodを起動する

2023年6月18日


Ubuntu22.04にmicrok8sをインストールする手順を紹介します。

microk8sインストール

  1. インストール
  2. 
    $ snap info microk8s -microk8sパッケージ情報確認
    $ sudo snap install microk8s --channel latest/stable --classic -microk8s安定版インストール
     microk8s v1.32.3 from Canonical✓ installed
    $ sudo microk8s version
     MicroK8s v1.32.3 revision 7977
    
  3. microk8sグループにユーザadmin追加
  4. 
    $ cat /etc/group | grep microk8s -microk8sグループ存在確認
     microk8s:x:1004:
    $ sudo usermod -a -G microk8s admin -adminユーザをmicrok8sグループに追加
    $ cat /etc/group | grep microk8s -グループ追加結果確認
     microk8s:x:1004:admin
    $ newgrp microk8s -microk8sグループに切替
    
  5. microk8sの起動
  6. 
    $ microk8s start
    $ microk8s status --wait-ready -microk8s起動完了待機
     microk8s is running
     high-availability: no
       datastore master nodes: 127.0.0.1:19001
       datastore standby nodes: none
     addons:
       enabled:
         dns                  # (core) CoreDNS
         ha-cluster           # (core) Configure high availability on the current node
         helm                 # (core) Helm - the package manager for Kubernetes
         helm3                # (core) Helm 3 - the package manager for Kubernetes
       disabled:
         cert-manager         # (core) Cloud native certificate management
         cis-hardening        # (core) Apply CIS K8s hardening
         community            # (core) The community addons repository
         dashboard            # (core) The Kubernetes dashboard
         host-access          # (core) Allow Pods connecting to Host services smoothly
         hostpath-storage     # (core) Storage class; allocates storage from host directory
         ingress              # (core) Ingress controller for external access
         kube-ovn             # (core) An advanced network fabric for Kubernetes
         mayastor             # (core) OpenEBS MayaStor
         metallb              # (core) Loadbalancer for your Kubernetes cluster
         metrics-server       # (core) K8s Metrics Server for API access to service metrics
         minio                # (core) MinIO object storage
         observability        # (core) A lightweight observability stack for logs, traces and metrics
         prometheus           # (core) Prometheus operator for monitoring and logging
         rbac                 # (core) Role-Based Access Control for authorisation
         registry             # (core) Private image registry exposed on localhost:32000
         rook-ceph            # (core) Distributed Ceph storage using Rook
         storage              # (core) Alias to hostpath-storage add-on, deprecated
    $ ll ~/.kube - .kubeディレクトリが作成されていること
     total 12
     drwxr-x--- 3 admin microk8s 4096 Aug 17 17:03 ./
     drwxr-x--- 6 admin admin   4096 Aug 17 17:03 ../
     drwxr-x--- 4 admin microk8s 4096 Aug 17 17:03 cache/
    $ sudo chown -R admin ~/.kube -権限変更、所有者を再起的にrootから一般ユーザに変える ※既に所有者がadminなので不要
    停止するときは、
    $ microk8s stop
    
  7. 必要なプラグインを有効にする
  8. 
    $ microk8s enable dns -DNS機能有効化
    $ microk8s enable hostpath-storage -ローカルストレージ有効化
    $ microk8s enable dashboard -Web管理画面有効化
    
  9. kubectlを実行すればmicrok8s.kubectlが実行されるようにalias設定
  10. 
    $ sudo snap alias microk8s.kubectl kubectl -kubectlエイリアス設定
     Added:
       - microk8s.kubectl as kubectl
    $ kubectl get nodes
     NAME   STATUS   ROLES    AGE    VERSION
     ras4   Ready       161m   v1.32.3
    
  11. nginxを3つのレプリカで起動する
  12. 
    >$ kubectl run nginx --image nginx --replicas 3
    ↓こちらは廃止されたコマンドなので下記を使用
    $ kubectl create deployment nginx --image=nginx --replicas=3
     deployment.apps/nginx created
    
    $ kubectl expose deployment nginx --port=80 --type=NodePort
     service/nginx exposed
    
    $ kubectl get nodes -ノード一覧表示
     NAME   STATUS   ROLES    AGE   VERSION
     ras4   Ready       31h   v1.32.3
    
    $ kubectl get services -サービス一覧表示
     NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
     kubernetes   ClusterIP   10.152.183.1            443/TCP        31h
     nginx        NodePort    10.152.183.63           80:32382/TCP   34s
    
    $ kubectl get pods -Pod一覧表示
     NAME                     READY   STATUS    RESTARTS   AGE
     nginx-5869d7778c-9bj9z   1/1     Running   0          84s
     nginx-5869d7778c-fvd59   1/1     Running   0          84s
     nginx-5869d7778c-gkflv   1/1     Running   0          84s
    
  13. 起動確認
  14. 
    $ curl http://localhost:32382
    <html>
    <head>
    <title>Welcome to nginx!</title>
    略
    $
    $ kubectl get svc nginx -o wide
    NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE   SELECTOR
    nginx   NodePort   10.152.183.63           80:32382/TCP   46m   app=nginx
    $
    $ kubectl describe svc nginx
    Name:                     nginx
    Namespace:                default
    Labels:                   app=nginx
    Annotations:              
    Selector:                 app=nginx
    Type:                     NodePort
    IP Family Policy:         SingleStack
    IP Families:              IPv4
    IP:                       10.152.183.63
    IPs:                      10.152.183.63
    Port:                       80/TCP
    TargetPort:               80/TCP
    NodePort:                   32382/TCP
    Endpoints:                10.1.248.207:80,10.1.248.206:80,10.1.248.205:80
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Internal Traffic Policy:  Cluster
    Events:                   
    

    別ホストからnginxへアクセスします。
    ポート32382から80へポートフォワードされて、3つのnginxPodsにロードバランシングされます

  15. イメージ図

nginxのdeploymentおよびserviceを削除する

  1. deploymentを削除することで、deploymentで管理されるPodも削除される
    
    $ kubectl scale deployment nginx --replicas=0
    deployment.apps/nginx scaled
    
    $ kubectl get deployment
    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   0/0     0            0           8d
    
    $ kubectl delete deployments nginx
    deployment.apps "nginx" deleted
    
    $ kubectl get pods
    No resources found in default namespace.
    
  2. serviceを削除することで、Podへのアクセス経路が削除される
    
    $ kubectl get service
    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    kubernetes   ClusterIP   10.152.183.1            443/TCP        9d
    nginx        NodePort    10.152.183.63           80:32382/TCP   8d
    
    $ kubectl delete service nginx
    service "nginx" deleted
    
    $ kubectl get service
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.152.183.1           443/TCP   9d
    

アンインストール手順


$ microk8s stop
$ sudo snap remove microk8s
$ sudo rm -rf ~/.kube

CATEGORIES & TAGS

Kubernetes,

Author:


  1. […] ンストール方法を紹介しています。 microk8sインストール方法 […]

  2. […] – 【kubernetes】microk8sインストール – microk8sのInstall/Uninstall – dashboard関連 – Podのデプロイ – nginxによるLoad Balancer […]

【Kubernetes】UbuntuでMicrok8sを構築する手順 – murci.net へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

カテゴリー

むるし

フリーランスのインフラ系エンジニア。
備忘録で色々書いていきます。
お問い合わせは↓
mo-gyu@murci.net
保有:LPIC303 Security、CCNA