Docker Desktopを使った「Eclipse Che 7」のインストール(失敗)

Eclipse Che 7に興味を持ちインストールを試した際の健闘の記録です。

最終的には別の方法でインストールはできたのですが、ここで作業した内容は失敗しています。失敗の記録も何かしらのヒントになることもあると思いますので、記事にしておきます。

ここに記載していないものもあるので、何か気になる点があればご連絡(コメントなど)いただければと思います。

なお、無事にインストールできた際の記録は以下に記載しています。

minikubeでEclipse Che 7の起動
Eclipse Che 7をインストール、起動した際の手順です。 公式手順ではいくつか方法が載っていますが、今回はminikubeの上でchectlを使って起動しています。 前提 前提として、以下をインストールした後に作業しています。 Ku...

参考元

https://www.publickey1.jp/blog/19/webideeclipse_che_7vscodeaskubernetes.html

上記の記事をみて興味を持ちました。

基本的には上記にリンクのあった以下の公式サイトをベースに作業しています。

https://www.eclipse.org/che/

注釈

途中で分かったのですが、Eclipse Che 7のインストール方法は以下の2種類に分かれます。

  • chectlコマンドを使ってインストールする方法
  • chectlコマンドを使わずにインストールする方法

前者は事前にminikubeなどの環境を用意しておいて、chectlコマンドにお任せする感じです。後者はEclipse Cheが起動していくまでのステップを一つ一つコマンド実行していくような感じです。

多分、後者の方が自由度は高いと思いますが、環境が用意できるならchectlコマンドを使ったインストールの方が良いと思います。実際、私が成功したインストールはchectlコマンドを使った方法になります。

以降に記載しているコマンドや手順は上記を把握できていない状態で色々と試していた際のものになります。chectlを使わない手順を見つつchectlコマンドを実行するという形になっているので、もし参考にする場合はその点にご注意いただければと思います。

インストールを試した色々

シングルユーザモードでインストール。

https://www.eclipse.org/che/docs/che-7/running-che-locally/#installing-che-on-kind-using-chectl_running-che-locally

とりあえず、実行を試してみる。

$ chectl server:start
✔ Verify Kubernetes API…OK
✔ 👀 Looking for an already existing Che instance
✔ Verify if Che is deployed into namespace "che"…it is not
✖ ✈️ Platform preflight checklist
→ Platform is required ¯_(ツ)/¯ › Error: Platform is required ¯_(ツ)
$

エラー。以下を参照となっているので参照。

https://che.eclipse.org/running-eclipse-che-on-kubernetes-using-docker-desktop-for-mac-5d972ed511e1

上記を参考に作業してみる。前提条件などのチェックはスキップ。

手順を参考に以下を実行。

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

404。。。。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
 error: unable to read URL "https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml", server reported 404 Not Found, status code=404

リンク先から以下のコマンド?違い的にはstaticの有無っぽい。

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

実行。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
 namespace/ingress-nginx created
 configmap/nginx-configuration created
 configmap/tcp-services created
 configmap/udp-services created
 serviceaccount/nginx-ingress-serviceaccount created
 clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
 role.rbac.authorization.k8s.io/nginx-ingress-role created
 rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
 clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
 deployment.apps/nginx-ingress-controller created
$
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml
 service/ingress-nginx created
$

OK。おそらくまだNGだが再度試してみる。

$ chectl server:start
   ✔ Verify Kubernetes API…OK
   ✔ 👀  Looking for an already existing Che instance
     ✔ Verify if Che is deployed into namespace "che"…it is not
   ✖ ✈️  Platform preflight checklist
     → Platform is required ¯_(ツ)/¯  ›   Error: Platform is required ¯_(ツ)/¯
 $

エラー。helmが必要ということでhomebrewを使ってインストール。

$ brew install kubernetes-helm

インストール実行。OK。結果確認。

$ helm version
 version.BuildInfo{Version:"v3.0.2", GitCommit:"19e47ee3283ae98139d98460de796c1be1e3975f", GitTreeState:"clean", GoVersion:"go1.13.5"}
$

OK。続き。

$ git clone -b '6.13.0' --single-branch --depth 1 https://github.com/eclipse/che

なんか、試したいバージョンじゃない気がする。。。。

とりあえず、続行。クローンは普通にOK。

cd che/deploy/kubernetes/helm/che
$ kubectl create serviceaccount tiller --namespace kube-system
 serviceaccount/tiller created
 $
 $ kubectl apply -f ./tiller-rbac.yaml
 clusterrolebinding.rbac.authorization.k8s.io/tiller-role-binding created
 Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
 serviceaccount/tiller configured
 $
 $ helm init --service-account tiller
 Error: unknown flag: --service-account
 $

なんか最後にエラーになった。

簡単に調べた感じだと不要になったっぽい?

Tiller was removed in helm 3, and therefore helm init is no longer necessary. See https://helm.sh/docs/faq/#removal-of-tiller

https://github.com/helm/helm/issues/7052

続行してみる。

$ kubectl get services --namespace ingress-nginx
$ export CHE_DOMAIN=$(kubectl get services --namespace ingress-nginx -o jsonpath='{.items[*].spec.clusterIP}')
$

OK。次。

$ sudo ifconfig lo0 alias ${CHE_DOMAIN}

なんか怖そうなコマンドがきた。。。

ちゃんと次の行に説明があった。一時的、再起動したらエイリアスは消えるとのこと。OK。

Alias is temporary. After a reboot it will be gone. It can be removed using the following command. (you may replace CHE_DOMAIN by a specific ip address if you don’t have anymore value of CHE_DOMAIN). ifconfig lo0 command displays all the aliases.

続行。

$ kubectl get pods --all-namespaces -o custom-columns=NAMESPACE:metadata.namespace,NAME:metadata.name,STATUS:status.phase
 NAMESPACE       NAME                                        STATUS
 docker          compose-6c67d745f6-5bz7b                    Running
 docker          compose-api-57ff65b8c7-wd6gl                Running
 ingress-nginx   nginx-ingress-controller-7dcc95dfbf-9s45q   Running
 kube-system     coredns-6dcc67dcbc-75qrd                    Running
 kube-system     coredns-6dcc67dcbc-jhfcv                    Running
 kube-system     etcd-docker-desktop                         Running
 kube-system     kube-apiserver-docker-desktop               Running
 kube-system     kube-controller-manager-docker-desktop      Running
 kube-system     kube-proxy-gz5sn                            Running
 kube-system     kube-scheduler-docker-desktop               Running
 $

最後?の実行。

$ helm upgrade --install che --namespace che --set cheImage=eclipse/che-server:6.13.0 --set global.cheWorkspacesNamespace="che" --set global.ingressDomain=${CHE_DOMAIN}.nip.io ./
 Release "che" does not exist. Installing it now.
 Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: [unknown object type "nil" in ConfigMap.data.CHE_LOGGER_CONFIG, unknown object type "nil" in ConfigMap.data.CHE_OAUTH_GITHUB_CLIENTID, unknown object type "nil" in ConfigMap.data.CHE_OAUTH_GITHUB_CLIENTSECRET, unknown object type "nil" in ConfigMap.data.CHE_WORKSPACE_HTTPS__PROXY, unknown object type "nil" in ConfigMap.data.CHE_WORKSPACE_HTTP__PROXY, unknown object type "nil" in ConfigMap.data.CHE_WORKSPACE_NO__PROXY]
$

エラーになったっぽい。確認してみたら、「kubectl get pods」した時にtillerがない。
これが原因?

やはり参考にしているページとバージョンが違うのは良くないのかもしれない。

古いバージョン、おそらく2系のhelmを入れたい。。。

$ brew search versions/kubernetes-helm
 No formula or cask found for "versions/kubernetes-helm".
 Closed pull requests:
 kubernetes-helm 2.16.1 (https://github.com/Homebrew/homebrew-core/pull/46671)
 helm 3.0.0 (https://github.com/Homebrew/homebrew-core/pull/46708)
 new recipe - kubernetes-helm@3 to install latest v3 rc (https://github.com/Homebrew/homebrew-core/pull/45789)
 New formulae: kubernetes-helm@2.9 2.9.1 kubernetes-helm@2.10 2.10.0 (https://github.com/Homebrew/homebrew-core/pull/34690)
 glide: fix for go >= 1.10 (https://github.com/Homebrew/homebrew-core/pull/31885)
 deis 2.12.0 (https://github.com/Homebrew/homebrew-core/pull/10809)
 $

brewからなんとかできないか頑張ったが、うまくできなかったので、以下から直接DLし、解凍したファイルをPATHが通った場所に格納した。

https://github.com/helm/helm/releases

$ helm version
 Client: &version.Version{SemVer:"v2.16.0-rc.1", GitCommit:"e13bf2345ff04508646e21e507fb64c275037162", GitTreeState:"clean"}
 Error: could not find tiller
$

一旦、バージョン変更はOK。再度、実行。

$ helm init --service-account tiller
 Creating …
…
…
…
$

うまく行ったような行かなかったような。。。

helm upgrade --install che --namespace che --set cheImage=eclipse/che-server:6.13.0 --set global.cheWorkspacesNamespace="che" --set global.ingressDomain=${CHE_DOMAIN}.nip.io ./

今度はエラーなく終了。OKか。。。?

アクセス不可。「kubectl get pods」でcheがPenddingになっているので、それが原因。。。?

chectl server:start

なんか実行したら開始した。。。。?

適当にワークスペースを作成してみた。

作成自体はできた様に見えたが、IDEを開くと以下のエラーが。

Error: Failed to run the workspace: " The error may be caused by an expired token or changed password. Update Che server deployment with a new token or password."

Google翻訳をしたところ以下の様に翻訳された。

エラー:ワークスペースの実行に失敗しました:「エラーはトークンの期限切れまたはパスワードの変更が原因である可能性があります。新しいトークンまたはパスワードでCheサーバーの展開を更新してください。」

良く分からない。。。。ログを見たら以下の様なメッセージが。

 2020-01-07 13:26:25,217[nio-8080-exec-2]  [INFO ] [o.e.c.a.w.s.WorkspaceRuntimes 322]   - Starting workspace 'che/wksp-2pls' with id 'workspacechtlxvpjpq4hsawc' by user 'che'
 2020-01-07 13:26:25,692[default.svc/…]  [WARN ] [k.c.d.i.WatchConnectionManager 195]  - Exec Failure: HTTP 403, Status: 403 -
 java.net.ProtocolException: Expected HTTP 101 response but was '403 Forbidden'
     at okhttp3.internal.ws.RealWebSocket.checkResponse(RealWebSocket.java:219)
     at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:186)
     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:153)
     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
     at java.lang.Thread.run(Thread.java:748)
 2020-01-07 13:26:25,702[aceSharedPool-2]  [WARN ] [.i.k.KubernetesInternalRuntime 224]  - Failed to start Kubernetes runtime of workspace workspacechtlxvpjpq4hsawc. Cause:  The error may be caused by an expired token or changed password. Update Che server deployment with a new token or password.
 2020-01-07 13:26:26,218[aceSharedPool-2]  [INFO ] [o.e.c.a.w.s.WorkspaceRuntimes 383]   - Workspace 'che:wksp-2pls' with id 'workspacechtlxvpjpq4hsawc' start failed

良く分からないので、一回、再起動?してみる。

$ chectl server:start
   ✔ Verify Kubernetes API…OK
   ✔ 👀  Looking for an already existing Che instance
     ✔ Verify if Che is deployed into namespace "che"
       ✔ Found stopped che deployment
   ✔ 👀  Starting already deployed Che
     ✔ Scaling up Che Deployments…done.
   ❯ ✅  Post installation checklist
   ❯ ✅  Post installation checklist
     ❯ Che pod bootstrap
       ✖ scheduling
         → ERR_TIMEOUT: Timeout set to pod wait timeout 300000. podExist: false, currentPhase: undefined
         downloading images
         starting
       Retrieving Che Server URL
       Che status check
 Error: ERR_TIMEOUT: Timeout set to pod wait timeout 300000. podExist: false, currentPhase: undefined
     at KubeHelper. (/usr/local/lib/chectl/lib/api/kube.js:599:19)
     at Generator.next ()
     at fulfilled (/usr/local/lib/chectl/node_modules/tslib/tslib.js:107:62)
 $

エラーっぽい。でも、再度ワークスペースにアクセスしたら画面は表示される。

これは画面が表示できているだけで、ちゃんと起動できていないパターン?

ただ、再度実行した際は成功になっているので、大丈夫?

$ chectl server:start
   ✔ Verify Kubernetes API…OK
   ✔ 👀  Looking for an already existing Che instance
     ✔ Verify if Che is deployed into namespace "che"
       ✔ Found running che deployment
     ✔ Check Che server status…RUNNING (auth disabled)
   ✔ ✅  Post installation checklist
     ✔ Retrieving Che Server URL…http://che-che.10.111.113.138.nip.io
     ✔ Che status check
 Command server:start has completed successfully.
 $

チェックアウトしているバージョンが悪い?色々試した時に以下のバージョンにしていた。。。

$ git branch -a
 (HEAD detached at 7.6.0) 

とりあえず、切り替えてみる。

$ git checkout refs/tags/6.13.0

再度インストールなど試したけど、ダメっぽい。

→この後も色々と試しましたが、最終的に諦めました。

コメント

タイトルとURLをコピーしました