Jenkins X をUbuntu(VM)内 k8s へインストール

参考資料
--------------------
[What Is Jenkins X (jenkins-x.io)](https://jenkins-x.io/about/what/)
[Install on Kubernetes (jenkins-x.io)](https://jenkins-x.io/getting-started/install-on-cluster/)
[Install Jenkins X (jenkins-x.io)](https://jenkins-x.io/getting-started/install/)
[What happens during installation (jenkins-x.io)](https://jenkins-x.io/getting-started/install-on-cluster-what-happens/)


前提条件
--------------------
- Ubuntu 16.04, 18.04


インストール要件: Jenkins X
--------------------
[Install on Kubernetes (jenkins-x.io)](https://jenkins-x.io/getting-started/install-on-cluster/)

- k8s 1.8以降をインストール済みである事
- CPUコア数4個以上のMaster Nodeと、CPUコア数4個以上で1個以上のWorker Nodeがある事
- RBAC(Role Based Access Control)が設定済みである事(以下コマンドで確認可能)

```
kubectl cluster-info dump | grep RBAC
```
- ストレージクラス`Persistent Volume Claim`に`Persistent Volume`を紐付けられる事
(＝Podが永続ストレージをマウント出来る状態である事)


### 補足

CPUコア数2個でMaster Nodeのみの環境でも、`jx compliance run`の適合確認をクリア出来た。
(ただし、60分どころかもっと時間かかったので、Master Node一つ & 60分で収めたい場合は8コアは必須かも)


インストール
--------------------
- [Install Jenkins X (jenkins-x.io)](https://jenkins-x.io/getting-started/install/)

Jenkins X の実行ファイルをダウンロードし、実行できるディレクトリへ配置するだけ。

```
curl -L https://github.com/jenkins-x/jx/releases/latest/download/jx-linux-amd64.tar.gz | tar xzv
sudo mv jx /usr/local/bin
```

環境適合確認
--------------------

以下実行すると、待ち時間が長いです。

```
jx compliance run
```
コマンド実行後に認証NG発生、k8sの`admin.conf`をコピーし忘れていた。。

```
sudo cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
```

適合確認の結果取得

```
jx compliance results
```

まだ確認中の場合のメッセージ

```
Compliance results not ready. Run `jx compliance status` for status.
```

仕方ないのでステータスを見てみると

```
jx compliance status
```

60分待つの？

```
Compliance tests are still running, it can take up to 60 minutes.
```

Nodeを見てみると、`sonobuoy`という名前、プレフィクスのPodがいくつか起動してる模様。

```
Namespace          Name
---------------    --------
heptio-sonobuoy    sonobuoy
```

時折`jx compliance results`を実行して、結果が表示されるまで待ちましょう。


k8s クラスタへ Jenkins X を参加させる
--------------------
直下のコマンドを実行後、何度か質問されるかもなので、待機の事。

```
jx install --provider=kubernetes --on-premise
```

選択肢が出るので好きな方を選ぶ、今回はTektonを使う

```
? Select Jenkins installation type:
Serverless Jenkins X Pipelines with Tekton
```

「`Helm`が足りないよ、自動でインストールしたい？」と出た。無論インストール(Enterキー押下)。

```
? Missing required dependencies, deselect to avoid auto installing: 
[x] helm
```

「`Git`で使う名前とemailアドレスおせーて」と出るので、打ち込む。

```
? Please enter the name you wish to use with git: <自分の名前>
? Please enter the email address you wish to use with git: <自分のメールアドレス>
```

警告が出た、覚えておかないと後で痛い目を見そう。

```
? No existing ingress controller found in the kube-system namespace, installing one: Yes
Deleting and cloning the Jenkins X versions repo
Cloning the Jenkins X versions repo ...(省略しました)
WARNING: failed to create system vault in namespace jx due to no "jx-vault-kubernetes" vault found in namespace "jx"
```

FATALが出て強制終了、さて何をすればいいのやら。

```
FATAL: ingress init failed: deployment jxing-nginx-ingress-controller never became ready
```

「ここ読め」と書いてあったので、読みましょう。
[What happens during installation (jenkins-x.io)](https://jenkins-x.io/getting-started/install-on-cluster-what-happens/)

読んでも分からなかったので、`jxing-nginx-ingress-controller never became ready`と書いてある事を頼りに、
`kubectl describe -A pod | less`でIngress ControllerのPodの状態を見てみました。
二つPodが立ちあがっているようで、片方だけ失敗しているようです。
`Containers: nginx-ingress-default-backend`はOK、
`Containers: nginx-ingress-controller`がNGです。

```
Conditions:
  Type             Status
  Initialized      True
  Ready            False
  ContainersReady  False
  PodScheduled     True
...
Events:
Type     Reason     ... Message
Warning  Unhealthy  ... Liveness probe failed: HTTP probe failed with statuscode: 500
Warning  BackOff    ... Back-off restarting failed container
```

う～ん・・・「HTTPのプローブが失敗した、500ステータスコードで」という事は、
もしかしたらRBACの設定をし忘れたかも・・・と、k8sクラスタの状態を調べて見ます。

```
kubectl cluster-info dump | less
```

`"command": [ ... "--authorization-mode=Node,RBAC", ...]`
が見つかりました。RBACは設定済みのようです。

k8sのヘルスチェックで失敗しているようです、`Liveness: ... #success=1 #failure=3`と書いてあるので、
`delay`を長くして見ましょう。

[Jenkins X Boot (jenkins-x.io)](https://jenkins-x.io/getting-started/boot/#ingress)
等見たり、yamlの`spec.containers.livenessProbe`を書き換えようとしましたが、失敗します(理解不足)。
また、コンテナにアクセスしようと`kubectl exec -t <pod_name> --namespace=kube-system /bin/bash`も実行しましたが、
そもそもコンテナ自体が立ち上がっていないらしく、これもNGです。

う～ん・・・`sudo ufw disable`してみよっかな・・・、なんとこれで成功しました。Firewallか・・・
と、実は`ufw`を無効化して成功したのは、2台中1台のUbuntuです。
メインで使いたかった低スペックなマシンのUbuntuは、同様の現象が出たままです。
まだ解決してないので、解決したら書こうかなと考えています。
(`kubectl logs`で見れたPodのログを見たり、ソースコードを読んだりしてますが、原因には行き着かず)

以上です。