2021年2月26日金曜日

Eclipse Che のユーザー情報を引き継いだまま別ネームスペースへデプロイしたい

元 che の keycloak エクスポート → 新 che デプロイ → 新 che で keycloak インポート。という感じでできるようだ。

前提

  • OS: Windows 10 Pro
  • ランタイム: Docker Desktop の Kubernetes

環境準備

ソースの取得

mkdir che_tmp
cd che_tmp

$WORK_DIR=$(pwd)

git clone --depth 1 https://github.com/eclipse/che.git

cd che
$CHE_SOURCE=$(pwd)

helm のバージョンアップ

Chocolatey で管理しているので、アップグレードする。

choco upgrade kubernetes-helm

デプロイ環境準備

ingress デプロイ

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml

pod の確認。

PS C:\Users\mikoto\project\tmp\che_tmp\che>  kubectl get pods --all-namespaces
NAMESPACE       NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx   ingress-nginx-admission-create-fnssb        0/1     Completed   0          81s
ingress-nginx   ingress-nginx-admission-patch-nxmpv         0/1     Completed   0          81s
ingress-nginx   ingress-nginx-controller-7fc74cf778-txd7v   1/1     Running     0          81s
kube-system     coredns-f9fd979d6-bsn9l                     1/1     Running     8          36d
kube-system     coredns-f9fd979d6-dxd4n                     1/1     Running     8          36d
kube-system     etcd-docker-desktop                         1/1     Running     15         36d
kube-system     kube-apiserver-docker-desktop               1/1     Running     16         36d
kube-system     kube-controller-manager-docker-desktop      1/1     Running     8          36d
kube-system     kube-proxy-td79h                            1/1     Running     8          36d
kube-system     kube-scheduler-docker-desktop               1/1     Running     20         36d
kube-system     storage-provisioner                         1/1     Running     34         36d
kube-system     vpnkit-controller                           1/1     Running     8          36d

IP アドレスをメモ

TYPE が LoadBalancer の CLUSTER-IP をメモする。この場合は 10.111.81.251。 以降は $DOMAIN_IP にメモした IP を設定したこととして進める。

PS C:\Users\mikoto\project\tmp\che_tmp\che> kubectl get services --namespace ingress-nginx
NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.111.81.251   localhost     80:31411/TCP,443:32118/TCP   20m
ingress-nginx-controller-admission   ClusterIP      10.99.113.1     <none>        443/TCP                      20m
$DOMAIN_IP="10.111.81.251"
$DOMAIN="$(echo ${DOMAIN_IP} | sed -e "s/\./-/g").nip.io"

ループバックアドレスの設定

start-process -verb runas powershell -ArgumentList netsh,interface,ipv4,add,address,Loopback,$DOMAIN_IP

追加されたことを確認。

netsh interface ipv4 show address Loopback

che を namespace che でデプロイ

kubectl create namespace che
cd $CHE_SOURCE\deploy\kubernetes\helm\che
helm dependency update
helm upgrade --install che --namespace che --set global.cheWorkspacesNamespace="che" --set global.ingressDomain=${DOMAIN}.nip.io  --set global.multiuser=true ./

アプリの確認。

PS C:\Users\mikoto\project\tmp\che_tmp\che\deploy\kubernetes\helm\che> helm list -n che
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
che     che             1               2021-02-26 06:40:16.5220543 +0900 JST   deployed        che-0.1.0

pod の確認。

PS C:\Users\mikoto\project\tmp\che_tmp\che\deploy\kubernetes\helm\che> kubectl get pods -n che
NAME                                READY   STATUS    RESTARTS   AGE
che-6b7475579d-k4pj2                1/1     Running   0          3m17s
che-dashboard-649cb64655-jwtsc      1/1     Running   0          6m48s
devfile-registry-7f5f8fdf4d-fpmtw   1/1     Running   0          6m48s
keycloak-5b4ff5bd5d-zndb8           1/1     Running   0          3m20s
plugin-registry-558796b4bd-xt96b    1/1     Running   0          6m48s
postgres-55d7974489-zwkht           1/1     Running   0          3m20s

keycloak にアクセス

keycloak にアクセスして管理者設定・ユーザー追加を行う。

start http://keycloak-che.${DOMAIN}.nip.io

che にアクセス

start http://che-che.${DOMAIN}.nip.io

ログインできることを確認する。

ユーザー情報エクスポート

Kuberenetes の Keycloak コンテナへログインする。

PS C:\Users\mikoto\project\tmp\che_tmp\che\deploy\kubernetes\helm\che> kubectl get pods -n che
NAME                                READY   STATUS    RESTARTS   AGE
che-696449ffff-rlmt9                1/1     Running   0          38m
che-dashboard-649cb64655-jwtsc      1/1     Running   0          61m
devfile-registry-7f5f8fdf4d-fpmtw   1/1     Running   0          61m
keycloak-cccb6d4b8-6jz8f            1/1     Running   0          41s
plugin-registry-558796b4bd-xt96b    1/1     Running   0          61m
postgres-55d7974489-zwkht           1/1     Running   0          57m
PS C:\Users\mikoto\project\tmp\che_tmp\che\deploy\kubernetes\helm\che> kubectl exec -it -n che -it keycloak-cccb6d4b8-6jz8f -- /bin/bash

ユーザー情報エクスポート。

/opt/jboss/keycloak/bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/opt/jboss/keycloak-export -Dkeycloak.migration.usersExportStrategy=DIFFERENT_FILES -Dkeycloak.migration.usersPerFile=100 -Djboss.http.port=8888 -Djboss.https.port=9999 -Djboss.management.http.port=7777 -Djboss.management.https.port=7776

以下のような表示が出たら完了。

22:35:14,133 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 6.0.1 (WildFly Core 8.0.0.Final) started in 11106ms - Started 617 of 880 services (563 services are lazy, passive or on-demand)

Ctrl+C で終了する。

エクスポートした情報をローカル PC へコピー

kubectl cp -n che keycloak-cccb6d4b8-6jz8f:keycloak-export ./keycloak-export

別 namespace にデプロイし、ユーザー情報をインポートする

ネームスペースを変更してデプロイする。

kubectl create namespace newnamespace
helm dependency update
helm upgrade --install che --namespace newnamespace --set global.cheWorkspacesNamespace="newnamespace" --set global.ingressDomain=${DOMAIN}.nip.io  --set global.multiuser=true ./

pod の確認。

PS C:\Users\mikoto\project\tmp\che_tmp\che\deploy\kubernetes\helm\che> kubectl get pods -n newnamespace
NAME                                READY   STATUS    RESTARTS   AGE
che-7b97c6cb46-f6zq7                1/1     Running   0          106s
che-dashboard-649cb64655-pc2sz      1/1     Running   0          106s
devfile-registry-7f5f8fdf4d-9qb4j   1/1     Running   0          106s
keycloak-74d657c877-dgnnc           1/1     Running   0          106s
plugin-registry-558796b4bd-z85zq    1/1     Running   0          106s
postgres-55d7974489-dw94p           1/1     Running   0          106s

ユーザー情報インポート

エクスポートした情報を Kuberenetes の Keycloak コンテナへコピーし、ログインする。

PS C:\Users\mikoto\project\tmp\che_tmp\che\deploy\kubernetes\helm\che> kubectl get pods -n newnamespace
NAME                                READY   STATUS    RESTARTS   AGE
che-7cb46784f7-hmz6v                1/1     Running   0          40m
che-dashboard-649cb64655-rvdpz      1/1     Running   0          40m
devfile-registry-7f5f8fdf4d-rpx8j   1/1     Running   0          40m
keycloak-74d657c877-b66gt           1/1     Running   0          40m
plugin-registry-558796b4bd-6k9nw    1/1     Running   0          40m
postgres-55d7974489-r268l           1/1     Running   0          40m
PS C:\Users\mikoto\project\tmp\che_tmp\che\deploy\kubernetes\helm\che> kubectl cp -n newnamespace ./keycloak-export keycloak-74d657c877-b66gt:./
PS C:\Users\mikoto\project\tmp\che_tmp\che\deploy\kubernetes\helm\che> kubectl exec -it -n newnamespace -it keycloak-74d657c877-b66gt -- /bin/bash

ユーザー情報インポート。

/opt/jboss/keycloak/bin/standalone.sh -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/opt/jboss/keycloak-export -Dkeycloak.migration.usersExportStrategy=DIFFERENT_FILES -Dkeycloak.migration.usersPerFile=100 -Djboss.http.port=8888 -Djboss.https.port=9999 -Djboss.management.http.port=7777 -Djboss.management.https.port=7776 -Dkeycloak.migration.realmName=che

以下のような表示が出たら完了。

22:54:15,594 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 6.0.1 (WildFly Core 8.0.0.Final) started in 13818ms - Started 617 of 880 services (563 services are lazy, passive or on-demand)

Ctrl+C で終了する。

keycloak にアクセス

keycloak にアクセスして管理者設定を行う。

start http://keycloak-newnamespace.${DOMAIN}.nip.io

この時点で、 che の namespace で作成したユーザーが登録されているはず。

che にアクセス

start http://che-newnamespace.${DOMAIN}.nip.io

ログインできることを確認する。

参考資料

0 件のコメント:

コメントを投稿