OpenshiftをInstanaで監視してる環境をさっさとデプロイする

# 注釈
この記事はAdvent Calenderの企画で書いているものなのですが、
残念ながらInstanaのUIはほとんど出てこないため、後ほど追記を行います。

# モチベーション
1.Openshiftの機能を使うデモを作成するにあたり、OCPをいちいち作成するのは面倒で、Openshift Localを使って常にささっとOCPに接続する環境が欲しい。

2.Openshiftlocalを使うと自分のマシンが熱くなる、重くなるから常時起動するのは面倒

3.Openshift localは内部的には仮想マシンを起動して内部でOpenshift Console用のコンテナ起動してるはずだから外部接続すればいいんじゃね・・・？

4.ついでにOpenshift localを複数動かして、InstanaやTurbonomicで複数のClusterを監視しているっぽいいい感じの環境をサクサク作りたい。


## Openshift localを実行しているLinux仮想マシンのtop 実行結果
    top - 00:45:19 up 2 days, 13:07,  4 users,  load average: 0.95, 1.62, 1.68
    Tasks: 352 total,   1 running, 351 sleeping,   0 stopped,   0 zombie
    %Cpu(s): 19.0 us,  9.8 sy,  0.0 ni, 69.5 id,  0.2 wa,  1.3 hi,  0.2 si,  0.0 st
    MiB Mem :  15733.4 total,    198.6 free,  11975.1 used,  14612.1 buff/cache
    MiB Swap:   8060.0 total,   7597.3 free,    462.7 used.   3758.3 avail Mem 

        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                     
      14434 qemu      20   0   14.1g  10.6g  10.5g S 118.3  69.0  44:09.22 qemu-kvm  

ばっちりkvm(qemuプロセス)動いてるじゃんか。ということは外から接続可能ですよね。


# 大まかな手順

以下の公式ドキュメントが外部接続の大きな手がかりとなります。
このあとにInstanaから登録を行えばささっとInstanaから、
Openshift環境をいくつも監視しているデモ環境をデプロイできるはず。

https://docs.redhat.com/ja/documentation/red_hat_openshift_local/2.25/html/getting_started_guide/connecting_to_a_remote_redhat_openshift_local_instance
を参照しながらやればいいのですが、いくつか手順が抜けているので
この記事で補足しながら実際に行ってみます。

手順
1.linux VMにOpenshift localをインストールする
1.Openshift localを実行しているVMのIPアドレスを把握する
2.Openshift localの名前解決をリモートマシンからできるようにする
3.リモートマシンからVMのIPアドレスに接続ができるようにする

## linux VMにOpenshift localをインストールする
まずredhat社のサイトからイメージを落としてきます。

    [admin@localhost ~]$ wget https://developers.redhat.com/content-gateway/rest/mirror/pub/openshift-v4/clients/crc/latest/crc-linux-amd64.tar.xz
    
URLは適宜バージョンにより変化しますので、必ず確認の上実行してください。
手順書に沿って黙々とインストール作業を行います。
    
    [admin@localhost ~]$ tar xvf crc-linux-amd64.tar.xz
    [admin@localhost ~]$ cp crc-linux-2.43.0-amd64/crc ~/bin/
    [admin@localhost ~]$ echo $PATH
    [admin@localhost ~]$ export PATH=$PATH:$HOME/bin
    [admin@localhost ~]$ echo PATH
    [admin@localhost ~]$ echo $PATH
    [admin@localhost ~]$ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
    [admin@localhost ~]$ crc start

ついでにこのタイミングで物理IPを調べておきます。
物理IPとはOpenshift localを実行している物理マシンのIPアドレスを指しています。

    [admin@localhost ~]$ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
    2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:99:3b:1e brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    inet 192.168.11.1/24 brd 192.168.11.255 scope global dynamic noprefixroute ens192
       valid_lft 48878sec preferred_lft 48878sec
    inet6 fe80::250:56ff:fe99:3b1e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:c3:b1:d3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
    4: crc: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:fd:be:d0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.130.1/24 brd 192.168.130.255 scope global crc
       valid_lft forever preferred_lft forever
    5: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master crc state UNKNOWN group default qlen 1000
    link/ether fe:fd:fc:07:21:82 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fcfd:fcff:fe07:2182/64 scope link 
       valid_lft forever preferred_lft forever

ens192 に192.168.11.1がアサインされているのがわかります。
ここで注意なのですが、私の環境はこのlinuxマシン自体が仮想マシンで動いています。
本来は物理クライアントにインストールするOpenshift localですので、
便宜上Openshift localをインストールしているマシンのIPを物理マシンのIP、
Opsnhift localが作り出すCRC VMのIPを仮想マシンのIPアドレスをVMのIPと呼んでます。

実際は仮想マシンなのでちょっとおかしな呼び方ではありますが、
明確に区別をする必要があるのであえてこの呼び方で進めさせて下さい。



## Openshift localを実行しているVMのIPアドレスを把握する
GUIベースの管理ソフトがあるのであればそこから確認もできますが、
実はクライアント仮想マシンにOpenshift localをインストールすると、
hostsに仮想マシンIPアドレスを書き込むという動作を行います。今回はそれを直接覗いてしまいます。

    [admin@localhost ~]$ cat /etc/hosts
    127.0.0.1        localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1              localhost localhost.localdomain localhost6 localhost6.localdomain6

    # Added by CRC
    192.168.130.11   api.crc.testing canary-openshift-ingress-canary.apps-crc.testing console-openshift-console.apps-crc.testing default-route-openshift-image-registry.apps-crc.testing downloads-openshift-console.apps-crc.testing oauth-openshift.apps-crc.testing
    # End of CRC section

今回の場合192.168.130.11が仮想マシンのIPアドレスです。
これを上手くリモートマシンに接続できればよいのです。


## Openshift localの名前解決をリモートマシンからできるようにする
DNSの名前解決ができれば何でも構いませんが、私は自宅にdnsmasqを動かしているVMがいるのでそれを使います。
（未確認ですが、リモートマシンのhostsに追記しても動作すると思います。）

    [admin@dns-machine ~]# vi /etc/dnsmasq.conf 
    address=/.testing/192.168.11.1 #追記. 必ず物理マシンのIPアドレスにする

ここで注意なのですが、必ず名前解決先のIPアドレスを物理マシンのIPにしておきます。


## リモートマシンからVMのIPアドレスに接続ができるようにする

前提条件として、リモートマシンから物理マシンへ IP reachableであることを前提に進めます。

まず仮想マシン内のネットワークに入り込み、なおかつ仮想マシン側から外側に出ていく設定を色々入れ込むのが面倒です。

なぜなら今回自動的に作成されるcrc vmの内部設定を全部把握できないためです。
crc vmにデフォルトゲートを設定するなどをしてもcrc cleanupなどでcrc vmが削除されてしまう可能性もあるため、今回は物理マシンにha proxyを入れて接続を行うことにします。
もしCRC VMのIPアドレスが192.168.130.11ではない場合はご自分のCRC VMのIPアドレスに読み替えて操作を行って下さい。

    [admin@localhost ~]$ dnf -y install haproxy
    [admin@localhost ~]$ vi /etc/haproxy.cfg  
    global
        log /dev/log local0

    defaults
        log global
        mode http
        timeout connect 10s
        timeout client 1m
        timeout server 1m

    frontend crc
        bind *:80
        option tcplog
        mode tcp
        default_backend crc

    frontend crc_https
        bind *:443
        option tcplog
        mode tcp
        default_backend crc_https
    
    backend crc
        mode tcp
        balance roundrobin
        server app1 192.168.130.11:80 check
    
    backend crc_https
        mode tcp
        balance roundrobin
        option ssl-hello-chk
        server app1 192.168.130.11:443 check
    
    frontend crc_api
        bind *:6443
        option tcplog
        mode tcp
        default_backend crc_api
    
    backend crc_api
        mode tcp
        balance roundrobin
        option ssl-hello-chk
        server app1 192.168.130.11:6443 check


ha proxyを起動します

    [admin@localhost ~]$ systemctl start haproxy

これでリモートマシンから接続ができるようになっています。


# Instanaへ接続をできるようにする。
https://www.ibm.com/docs/ja/instana-observability/current?topic=openshift-installing-agent-red-hat

Openshift localにアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293016/8f0b7651-7475-ddcb-a0cb-14dbf42fd765.png)

以下の記事を参考にしながらAgentをインストール

https://qiita.com/Sung-backyard-arson/items/12f8202f9c5c9b0b77d6

以上でお手軽にk8sを監視している環境がデプロイできました。
多少登録作業などがもたつくことなどはありますが、
概ね成功するので皆様ぜひお試しを！！