Fujitsu Cloud Direct ブログ

初心者エンジニア向け技術ブログ

ニフクラでKubernetesを使う方法(第1回. Anthos on bare metalクラスタインストール・作成編)

この記事は、ニフクラブログで2023-10-17に公開された記事を移転したものです。

こんにちは、CRE部 技術支援チームです。

近年システム開発においてコンテナは必須の技術となりつつあります。

その中でもKubernetesは有用なコンテナオーケストレーションシステムです。

ニフクラではKubernetesサービスとしてKubernetes Service Hatobaを提供していましたが、残念ながら2023年9月にサービスが終了しました。

Kubernetes Service Hatobaサービス終了後、ニフクラ上でKubernetesを利用するには以下の方法が考えられます。

  • 利用者自身でニフクラサーバー上でインストール作業を実施してKubernetes環境を構築する。
  • 他社クラウドのKubernetesサービスと連携してニフクラサーバー上でKubernetes環境を構築する。

今回はGoogleCloud提供のAnthos on bare metalクラスタ(他社サイトリンク)を利用してニフクラサーバー上でKubernetes環境を構築する方法を紹介します。

また、ニフクラとGoogleCloudのマルチクラウド環境でKubernetesのクラスタをサービスメッシュで連携するクラウドネイティブの運用方法についても紹介します。

以下4回に分けた記事を掲載します。

第1回. Anthos on bare metalクラスタインストール・作成編

第2回. マルチクラウド環境構築_VPN接続編

第3回. マルチクラスタメッシュ構成_East-WestGateway作成編

第4回. マルチクラスタメッシュ構成_疎通確認編

では、第1回目を始めます。

はじめに

今回はGoogleCloudのAnthos on bare metalクラスタをインストールしてニフクラ上でKubernetesのクラスタが作成・実行できることを確認します。

全体構成イメージ

前提条件

  • ニフクラの基本的なコントロールパネルの操作、サービスを利用する知識
  • GoogleCloudの基本的なコントロールパネルの操作、サービスを利用する知識
  • Kubernetesの基本的な知識、利用経験
  • Google Kubernetes Engine(GKE)クラスタの基本的な知識、利用経験
  • Istio(他社サイトリンク)等のサービスメッシュの基本的な知識、利用経験
  • GoogleCloudのアカウントを取得済み
  • GoogleCloudにプロジェクトが作成済み

作成するリソース

ニフクラリソース

以下のリソースをニフクラ環境に作成します。

リソース 数量
プライベートLAN 1
ファイアウォール 1
検証サーバー 1
増設ディスク 1

GoogleCloudリソース

GoogleCloudにGoogleCloudプロジェクト(他社サイトリンク)を作成します。 後述の「gcloudの初期化設定」でニフクラ環境からGoogleCloudプロジェクトにアクセスします。

ニフクラ環境構築

以下の内容でニフクラ環境を構築します。

ニフクラリソース作成

ファイアウォール名 INルール 用途
FWNIFC TCP22:xxx.xxx.xxx.xxx 外部のサーバー構築アクセス元から検証サーバーへのSSH接続用グローバルIP

プライベートLAN名 CIDR 用途
NifcAnthosClsLan 172.16.232.0/24 作成したAnthos on bare metalクラスタが展開されるネットワーク

項目
サーバー名 NifcAnthosSrv
OS Ubuntu Server 20.04 LTS
サーバータイプ e-large16
グローバルIPアドレス 自動割り当て
プライベートIPアドレス 172.16.232.1
項目
ディスク名 NifcDisk
ディスクタイプ 標準ディスク
容量 300G

追加したディスクの設定方法(マウント手順):Linux系OSの場合を参考に /var /mnt の各ディレクトリに150Gずつディスクを振り分けます。
※以降の記述では/dev/sdb1をvarマウント用、/dev/sdb2をmntマウント用を想定して記述します
※ /varの詳細設定についてはAnthosノードマシンの前提条件(他社サイトリンク)を参考にしてください。

var ディレクトリをマウントする/dev/sdb1の設定を実施します。※ /dev/sdb2、mnt に関してはfstadファイルの書き換え時以外は特に設定は不要です。

作業前にcpコマンドで /var および配下のディレクトリのバックアップを作成します。

$ cp -rpa /var/. /var_org

mkdirコマンドでパーティション作成後に仮置き場のディレクトリ /mnt/new_var/ を作成します。

$ mkdir /mnt/new_var/    

mountコマンドで作成した/mnt/new_varを/dev/sdb1に仮マウントします。

$ mount /dev/sdb1 /mnt/new_var

cpコマンドで既存の /var の中身を仮マウント先にコピーします。

cp -rpa /var/. /mnt/new_var

blkidコマンドで追加したディスク(sdb1,sdb2)の UUID を確認します。

$ blkid
/dev/sdb1: UUID="sdb111111-xxxxxxxxxxxxxxxxx-1111" TYPE="ext4" PARTUUID="xxxxxxxx"
/dev/sdb2: UUID="sdb222222-xxxxxxxxxxxxxxxxx-2222" TYPE="ext4" PARTUUID="xxxxxxxx"

viコマンドで取得したUUIDを設定します。

$ vi /etc/fstab
UUID=sdb111111-xxxxxxxxxxxxxxxxx-1111 /var                    ext4     defaults        0 0
UUID=sdb222222-xxxxxxxxxxxxxxxxx-2222 /mnt                    ext4     defaults        0 0

検証サーバーをコントロールパネル、Rebootコマンド等で再起動します。

再起動後にdfコマンドで内容を確認します。

$ df -h
---------省略---------
/dev/sdb1       147G   891M  139G   1% /var
/dev/sdb2       147G   61M  140G   1% /mnt
---------省略---------

以上増設ディスク作成は完了です。

※バックアップした内容をリストアする場合は以下rm、mvコマンド等でバックアップ入れ替え後に、viコマンドで /etc/fstab を編集して /var の設定行を削除します。編集後にサーバーを再起動するとリストアされます。

$ rm -rf /var 
$ mv /var_org /var 
$ vi /etc/fstab

↓↓↓/varの設定行を削除
---------省略---------
/dev/xxxx             /var      ext4  defaults  0 0
---------省略---------

Anthos on bare metalインストール作業

作成した検証サーバーにSSHログインしてAnthos on bare metalインストールと関連作業を実施します。

仮想ネットワークのインターフェイス除外設定

Anthos on bare metalインストール後にKubernetesクラスタを作成すると仮想ネットワークを複数作成します。作成された仮想ネットワークが原因で以下のようにニフクラのコントロールパネル表示でIP欄が 異常あり と表示される場合があります。

ニフクラのコントロールパネル表示が認識するネットワークから仮想ネットワークを除外するためにVMware Toolsの設定を変更します。

viコマンドで guestinfo項目、exclude-nics設定 を追加します。

$ vi  /etc/vmware-tools/tools.conf

[guestinfo]
exclude-nics=cillium*,lxc*

Anthos on bare metal用認証鍵作成

SSHのアクセス設定(他社サイトリンク)を参考に Anthos on bare metalクラスタ用の SSH 認証鍵を作成します。Anthos on bare metalクラスタが検証サーバーに ノーフレーズ でログインするために使用されます。 上記「SSHのアクセス設定」の手順1~3までを実施してid_rsa(公開鍵パス)とid_rsa.pub(公開鍵)を作成します。

/root/.ssh/authorized_keys に発行されたid_rsa.pub(公開鍵)の内容を
viコマンドで追記します。

$ vi /root/.ssh/authorized_keys

ssh -rsa XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

#↓↓↓初期設定されている公開鍵の後ろに発行したid_rsa.pub(公開鍵)の内容を追記します。
ssh -rsa XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

UFWを無効設定、Dockerインストール

Ubuntu構成(他社サイトリンク)を参考に Uncomplicated Firewallの無効(他社サイトリンク)Dockerインストール(他社サイトリンク)を実施します。

gcloud CLI及び各種関連ツールをインストール

ニフクラ環境からGoogleCloudプロジェクトにアクセスできるようにgcloud CLIインストール(他社サイトリンク)を参考に gcloud CLI及び各種関連ツールをインストールします。

gcloud の初期化設定

gcloud init を実行してgcloud の初期化設定をします。

$ gcloud init

発行されたURLにブラウザでアクセスします。

GoogleアカウントでログインしてSDKを許可します。

発行されたトークンをコピーします。

トークンを入力欄にペーストします。

作成したGoogleCloudeプロジェクトを選択します。

ゾーンを選択します。今回はasia-northeast1-b(東京)を選択します。

以上で初期化設定は完了です。

gcloud ログイン

gcloud auth application-default login を実行してgcloudにログインします。

$ gcloud auth application-default login

初期化設定と同様にブラウザで発行されたURLにアクセスしてトークンを取得して入力欄にペーストします。

以上でgcloud ログインは完了です。

kubectlインストール

コマンドツールのkubectl(他社サイトリンク)をインストールします。

$ sudo apt-get install kubectl

作業ディレクトリ作成

mkdirコマンドで作業ディレクトリを作成します。
※今回はnifc-anthosで作成します。

$ mkdir nifc-anthos

cdコマンドで作業ディレクトリに移動します。

$ cd nifc-anthos

Anthos on bare metal(bmctl)インストール

Anthos on bare metalダウンロード(他社サイトリンク)を参考にAnthos on bare metalをインストールします。実態は bmctl というコマンドツールです。

gsutil コマンドでbmctlをダウンロードします。今回はバージョン 1.15.3 を使用します。

$ gsutil cp gs://anthos-baremetal-release/bmctl/1.15.3/linux-amd64/bmctl

chmodコマンドで実行権限を付与します。

$ chmod a+x bmctl

mvコマンドで実行パス環境に bmctlを移動します。

$ mv bmctl /usr/local/sbin/

bmctlコマンドを実行してインストールを確認します。

$ bmctl -h

Usage:
  bmctl [flags]
  bmctl [command]

Available Commands:
---------省略---------

以上で Anthos on bare metal(bmctl)インストールは完了です。

Anthos on bare metalクラスタ(スタンドアロンタイプ)作成

検証ではスタンドアロンタイプ(他社サイトリンク)のクラスタを作成します。

クラスタ構成ファイル作成

exportコマンドでGoogleCloudプロジェクトのIDを環境変数に設定します。

export CLOUD_PROJECT_ID=$(gcloud config get-value project)

bmctlコマンドでクラスタ構成ファイルを作成します。
-c にはクラスタ名として nifc-anthosbm-cls を設定します。実行するとbmctl-workspace/クラスタ名配下に構成ファイルが作成されます。
※以下ではbmctl-workspace/nifc-anthosbm-cls/nifc-anthosbm-cls.yamlが出力される。

bmctl create config -c nifc-anthosbm-cls --enable-apis --create-service-accounts --project-id=$CLOUD_PROJECT_ID

viコマンドで構成ファイルを編集します。

vi bmctl-workspace/nifc-anthosbm-cls/nifc-anthosbm-cls.yaml

スタンドアロン基本エッジプロファイル(他社サイトリンク)を参考に編集します。 以下が主な編集箇所です。

項目
sshPrivateKeyPath 作成した公開キーのパス(id_rsa)
clusterSecurity/authorization/clusterAdmin/gcpAccounts xxxxx@xxxxxx(GoogleCloudアカウント)
controlPlane/nodePoolSpec/nodes/address 172.16.232.1
loadBalancer/vips/controlPlaneVIP 172.16.232.120
loadBalancer/vips/ingressVIP 172.16.232.121
addressPools/name:/pool1/addresses 172.16.232.121-172.16.232.130

nifc-anthosbm-cls.yaml

gcrKeyPath: bmctl-workspace/.sa-keys/xxxxxxxxxx($CLOUD_PROJECT_IDの値)-anthos-baremetal-gcr.json                                       
sshPrivateKeyPath:作成した公開キーのパス(id_rsa)                                 
gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/$CLOUD_PROJECT_ID-anthos-baremetal-connect.json                                      
gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/$CLOUD_PROJECT_ID-anthos-baremetal-register.json                                      
cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/$CLOUD_PROJECT_ID-anthos-baremetal-cloud-ops.json                                        

apiVersion: v1                                      
kind: Namespace                                     
metadata:                                       
  name: cluster-nifc-anthosbm-cls                                       

apiVersion: baremetal.cluster.gke.io/v1                                     
kind: Cluster                                       
metadata:                                       
  name: nifc-anthosbm-cls                                       
  namespace: cluster-nifc-anthosbm-cls                                      
spec:                                       
  type: standalone                                      
  profile: edge                                     

  anthosBareMetalVersion: 1.15.3                                        

  gkeConnect:                                       
    projectID: xxxxxxxxxx($CLOUD_PROJECT_IDの値)
  clusterSecurity:                                      
    authorization:                                      
      clusterAdmin:                                     
        gcpAccounts: [xxxxx@xxxxxx(GoogleCloudアカウント)]                                     

  controlPlane:                                     
    nodePoolSpec:                                       
      nodes:                                        
      - address: 172.16.232.1                               
  clusterNetwork:                                       
    pods:                                       
      cidrBlocks:                                       
      - 192.168.0.0/16                                      
    services:                                       
      cidrBlocks:                                       
      - 10.96.0.0/20                                        
  loadBalancer:                                     
    mode: bundled                                       
    ports:                                      
      controlPlaneLBPort: 443                                       
    vips:                                       
      controlPlaneVIP: 172.16.232.120                                       
      ingressVIP: 172.16.232.121                                        
    addressPools:                                   
    - name: pool1                                       
      addresses:                                        
      - 172.16.232.121-172.16.232.130                                       
  clusterOperations:                                        
    projectID: xxxxxxxxxx($CLOUD_PROJECT_IDの値)                              
    location: us-central1                                       
  storage:                                      
    lvpNodeMounts:                                      
      path: /mnt/localpv-disk                                       
      storageClassName: local-disks                                     
    lvpShare:                                       
      path: /mnt/localpv-share                                      
      storageClassName: local-shared                                        
      numPVUnderSharedPath: 5                                       
  nodeConfig:                                       
    podDensity:                                     
      maxPodsPerNode: 110

クラスタ作成&Anthos登録

bmctlコマンドでクラスタ構成ファイルを実行します。

bmctl create cluster -c nifc-anthosbm-cls

クラスタが作成されてGoogleCloud上に登録されます。
※時間は10分ほどかかります。

以上でAnthos on bare metalクラスタ登録は完了です。

GoogleCloudコントロールパネルでAnthos on bare metalクラスタにログイン

作成完了後GoogleCloudのコントロールパネルでクラスタの登録を確認して、コントロールパネル上でクラスタ操作・クラスタのモニタリングをするためにログインします。

コントロールパネルメニューから「Kubernetes Engine→クラスタ」を選択します。

作成したAnthos on bare metalクラスタが登録されています。初期状態はログアウト状態になっています。右端の「操作メニュー」を選択します。

「ログイン」を選択します。

「ログイン」方法を選択します。今回はGoogle IDでログインします。その他のログイン方法を選択する場合はログイン方法(他社サイトリンク)を参照してください。

ログインは完了です

Anthosサービス画面も確認します。コントロールパネルメニューから「Anthos→クラスタ」を選択します。

Anthosサービス画面でもログイン状態が確認できます。

以上でコントロールパネルでのログインは完了です。

Pod、Service作成確認

作成したAnthos on bare metalクラスタでデプロイが実行できるか確認します。

APIサーバーモックとして仮のレスポンスを返却してくれるオープンソースhttpbin(他社サイトリンク)をイメージとして利用します。

httpbinイメージのPodとServiceを作成して仮想のAPIサーバーを構築してcurlコマンドでリクエストを送信して応答が返ってくるかを確認します。

exportコマンドを実行してkubectlコマンドでクラスタが操作できるように構成ファイルパスを環境変数に設定します。

export KUBECONFIG=bmctl-workspace/nifc-anthosbm-cls/nifc-anthosbm-cls-kubeconfig

viコマンドでtest_deploy.yamlを作成します。

$ vi test_deploy.yaml

test_deploy.yaml

apiVersion: v1
kind: Service
metadata:
  name: httpbin
spec:
  type: LoadBalancer
  selector:
    app: httpbin
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin
  labels:
    app: httpbin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
  template:
    metadata:
      labels:
        app: httpbin
    spec:
      containers:
      - name: httpbin
        image: kennethreitz/httpbin
        ports:
        - containerPort: 80

kubectl コマンドを実行してhttpbinをデプロイします。

$ kubectl apply -f  test_deploy.yaml

service/httpbin created
deployment.apps/httpbin created

kubectl コマンドを実行してhttpbinのデプロイを確認します。

$ kubectl get pods,svc
NAME                           READY   STATUS    RESTARTS   AGE
pod/httpbin-xxxxxxx-xxxxx   1/1     Running   0          2m55s

NAME                 TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
service/httpbin      LoadBalancer   10.96.10.80   172.16.232.123   80:32765/TCP   2m55s

curlコマンドを実行してクラスタ上のhttpbinの動作を確認します。
割り当てされたEXTERNAL-IP(172.16.232.123)をIPに指定します。

$ curl http://172.16.232.123/headers
{
  "headers": {
    "Accept": "*/*",
    "Host": "172.16.232.123",
    "User-Agent": "curl/7.68.0"
  }
}

正常に応答が返却されました。

以上でAnthos on bare metalクラスタの作成と登録は完了です。

まとめ

今回はGoogleCloudのAnthos on bare metalクラスタをインストールしてニフクラ上でKubernetesクラスタが作成・実行できることを確認しました。

次回以降はGoogleCloud上にGKEクラスタ(他社サイトリンク)を作成して マルチクラウド環境 サービスメッシュ クラウドネイティブ の観点を加えてKubernetesクラスタの利用方法をより深く紹介していきます。

最後までお読みくださいましてありがとうございました。

注意事項

  • 本記事に記載されている会社名、製品名等の固有名詞は各社の商号、登録商標または商標です。
  • 本記事の他社サイトへのリンクにつきまして、リンク切れの際はご容赦ください。
  • 本記事は、2023年10月時点の情報です。