この記事は、ニフクラブログで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クラスタが展開されるネットワーク |
- 検証サーバー作成
Anthosの推奨要件(他社サイトリンク)を参考にサーバーを作成します。
項目 | 値 |
---|---|
サーバー名 | NifcAnthosSrv |
OS | Ubuntu Server 20.04 LTS |
サーバータイプ | e-large16 |
グローバルIPアドレス | 自動割り当て |
プライベートIPアドレス | 172.16.232.1 |
- 増設ディスク作成
Anthosの推奨要件(他社サイトリンク)を参考に検証サーバー用に増設ディスクを作成します。
項目 | 値 |
---|---|
ディスク名 | 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 /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月時点の情報です。