基本的に、 Installing Che on Microsoft Azure | Eclipse Che Documentation の通りに進めていくだけ。
前提
- 使用するドメインはあらかじめ取得しておく
Azure へログイン
AKS 接続用の Docker コンテナを使う。
Azure へログイン。
以降、このコンテナ内で作業を行う。
Kubernetes クラスタ作成
### 必要な情報整理
RESOURCE_GROUP="DemoOf20191117"
AKS_NAME="eclipse-che"
az group create --name ${RESOURCE_GROUP} --location japaneast
az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-vm-size Standard_DS3_v2 --node-count 1 --enable-addons monitoring --generate-ssh-keys
az aks get-credentials --name ${AKS_NAME} --resource-group ${RESOURCE_GROUP}
kubectl config current-context
Ingress デプロイ
kubernetes/ingress-nginx
の yaml をそのまま使ってデプロイ。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/2de5a893aa15f14102d714e918b0045b960ad1a5/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/2de5a893aa15f14102d714e918b0045b960ad1a5/deploy/static/provider/cloud-generic.yaml
ingress-nginx
の LoadBalancer
に EXTERNAL-IP
が割り当てられるまで待つ。
bash-4.4# kubectl get pods --namespace ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-65fd579494-mbgpr 1/1 Running 0 54s
bash-4.4# kubectl get services --namespace ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx LoadBalancer 10.0.109.4 40.115.138.246 80:32425/TCP,443:32188/TCP 68s
Ingress の公開 IP アドレスをメモ。
Azure 設定
Azure DNS を作成
### 必要な情報整理
ZONE_NAME="mikoto2000.dev"
# DNS ゾーン作成
az network dns zone create -g ${RESOURCE_GROUP} -n ${ZONE_NAME}
# DNS レコード作成
az network dns record-set a add-record -g ${RESOURCE_GROUP} -z ${ZONE_NAME} -n '*' -a ${COMMON_IP}
Azure DNS へドメインを移管
詳細はドメインレジストラのドキュメントを見ること。
お名前.com の場合には、以下リンク先のように移管作業できるようだ。
cert-manager 用のサービスプリンシパルの作成
cert-manager
は、Let’s Encrypt からの証明書発行を自動でやってくれるやつ。 これが Azure DNS のレコード操作を行う必要があるため、Azure DNS にアクセス可能なサービスプリンシパルを作成する。
### 必要な情報整理
# cert-manager がアクセスする DNS Zone 名前
AZURE_CERT_MANAGER_DNS_NAME="${ZONE_NAME}"
# cert-manager のサービスプリンシパルを作成し、 ID を取得
AZURE_CERT_MANAGER_SP_APP_ID=$(az ad sp create-for-rbac --name cert-manager-eclipse-che --query "appId" --output tsv)
# cert-manager のパスワードを作成し取得
AZURE_CERT_MANAGER_SP_PASSWORD=$(az ad sp create-for-rbac --name cert-manager-eclipse-che --query "password" --output tsv)
# Azure DNS の ID 取得
DNS_ID=$(az network dns zone show --name $AZURE_CERT_MANAGER_DNS_NAME --resource-group ${RESOURCE_GROUP} --query "id" --output tsv)
# 作成したサービスプリンシパルの権限を変更(Contributor を削除し、 Azure DNS Zone へのアクセスを追加)
az role assignment delete --assignee $AZURE_CERT_MANAGER_SP_APP_ID --role Contributor
az role assignment create --assignee $AZURE_CERT_MANAGER_SP_APP_ID --role "DNS Zone Contributor" --scope $DNS_ID
# 設定した権限を確認
az role assignment list --assignee $AZURE_CERT_MANAGER_SP_APP_ID --all
# ID と PASSWORD を確認
echo ID=$AZURE_CERT_MANAGER_SP_APP_ID
echo PASSWORD=$AZURE_CERT_MANAGER_SP_PASSWORD
Kubernetes に cert-manager をデプロイ
# cert-manager デプロイ
kubectl create namespace cert-manager
kubectl create secret generic azuredns-config --from-literal=CLIENT_SECRET=$AZURE_CERT_MANAGER_SP_PASSWORD -n cert-manager
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v0.8.1/cert-manager.yaml --validate=false
kubectl create namespace che
### 必要な情報整理
CLIENT_ID=${AZURE_CERT_MANAGER_SP_APP_ID}
SUBSCRIPTION_ID=$(az account show | jq -r '.id')
TENANT_ID=$(az account show | jq -r '.tenantId')
EMAIL="mikoto2000@gmail.com"
cat <<EOF | kubectl apply -f -
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: che-certificate-issuer
spec:
acme:
dns01:
providers:
- azuredns:
clientID: ${CILENT_ID}
clientSecretSecretRef:
name: azuredns-config
key: CLIENT_SECRET
subscriptionID: ${SUBSCRIPTION_ID}
tenantID: ${TENANT_ID}
resourceGroupName: ${RESOURCE_GROUP}
hostedZoneName: ${ZONE_NAME}
name: azuredns
email: ${EMAIL}
privateKeySecretRef:
name: letsencrypt
server: https://acme-v02.api.letsencrypt.org/directory
EOF
cat <<EOF | kubectl apply -f -
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: che-tls
namespace: che
spec:
secretName: che-tls
issuerRef:
name: che-certificate-issuer
kind: ClusterIssuer
dnsNames:
- '*.${ZONE_NAME}'
acme:
config:
- dns01:
provider: azuredns
domains:
- '*.${ZONE_NAME}'
EOF
ログを確認して証明書が正常に発行されるのを待つ。
kubectl get pods -n cert-manager
kubectl logs -f -n cert-manager cert-manager-68cfd787b6-b6sh8
kubectl describe certificate/che-tls -n che
Che のデプロイ
tiller デプロイ
che デプロイ
helm repo update
helm dependency update
helm upgrade --install che --namespace che --set cheImage="eclipse/che-server:nightly" --set global.cheWorkspacesNamespace="che" --set global.ingressDomain="${ZONE_NAME}" --set global.multiuser=true --set global.tls.enabled=true ./
その他
ノード操作
ノード停止。
# ノード名・リソースグループ一覧取得
bash-4.4# az vm list --query "[].[name, resourceGroup]" --output tsv
aks-nodepool1-38214215-0 MC_DEMOOF20191117_ECLIPSE-CHE_JAPANEAST
# VM ステータス確認
bash-4.4# az vm get-instance-view -g MC_DEMOOF20191117_ECLIPSE-CHE_JAPANEAST -n aks-nodepool1-38214215-0 --query instanceView.statuses[1].displayStatus --outpu
t tsv
VM deallocated
# ノード停止(割り当て解除)
bash-4.4# az vm deallocate -g MC_DEMOOF20191117_ECLIPSE-CHE_JAPANEAST -n aks-nodepool1-38214215-0
# ノード開始
bash-4.4# az vm start -g MC_DEMOOF20191117_ECLIPSE-CHE_JAPANEAST -n aks-nodepool1-38214215-0