OCIコンピュートインスタンスの初期設定（OKEのクライアント用）

# はじめに
OKE（Oralce Container Engine for Kubernetes）のクライアントとして、OCIのコンピュートインスタンスをセットアップした時の備忘録です。
OSはOracle Linux 8.6です。

```
$ cat /etc/oracle-release
Oracle Linux Server release 8.6
```

# Dockerのインストール
DockerのインストールスクリプトはOracle Linuxに対応してないので、使えませんでした。

```
$ curl -fsSL get.docker.com -o get-docker.sh
$ ls -l
total 20
-rw-rw-r--. 1 opc opc 19873 Sep 19 06:37 get-docker.sh
$ sh get-docker.sh
# Executing docker install script, commit: 4f282167c425347a931ccfd95cc91fab041d414f

ERROR: Unsupported distribution 'ol'
```

こちらを参考に個別にインストールします。
https://zenn.dev/kyami/articles/15185192395cb7

## パッケージのアップデート
```
$ sudo yum update -y
$ sudo yum upgrade -y
```

## リポジトリの設定
```
$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
```

## Dockerのインストール

```
$ sudo dnf install -y docker-ce --nobest
Docker CE Stable - x86_64                                                                                                                                  258 kB/s |  27 kB     00:00
Dependencies resolved.

・・・

Installed:
  container-selinux-2:2.188.0-1.module+el8.6.0+20721+d8d917a9.noarch   containerd.io-1.6.8-3.1.el8.x86_64                          docker-ce-3:20.10.18-3.el8.x86_64
  docker-ce-cli-1:20.10.18-3.el8.x86_64                                docker-ce-rootless-extras-20.10.18-3.el8.x86_64             docker-scan-plugin-0.17.0-3.el8.x86_64
  fuse-common-3.3.0-15.0.2.el8.x86_64                                  fuse-overlayfs-1.9-1.module+el8.6.0+20721+d8d917a9.x86_64   fuse3-3.3.0-15.0.2.el8.x86_64
  fuse3-libs-3.3.0-15.0.2.el8.x86_64                                   libcgroup-0.41-19.el8.x86_64                                libslirp-4.4.0-1.module+el8.6.0+20721+d8d917a9.x86_64
  slirp4netns-1.2.0-2.module+el8.6.0+20721+d8d917a9.x86_64

Complete!
```

## サービスの起動

```
$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com
$ sudo systemctl start docker
$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-09-19 06:54:20 GMT; 13s ago
     Docs: https://docs.docker.com
 Main PID: 66879 (dockerd)
    Tasks: 8
   Memory: 29.2M
   CGroup: /system.slice/docker.service
           mq66879 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

・・・

$ sudo systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
$ systemctl is-enabled docker
enabled
```

## 確認

```
$ sudo docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.18
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: false
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
 runc version: v1.1.4-0-g5fd4c4d
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.4.17-2136.310.7.1.el8uek.x86_64
 Operating System: Oracle Linux Server 8.6
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 15.22GiB
 Name: osk-instance01
 ID: DDLQ:5JDY:M5HU:YRZS:VODA:EB5C:7UVS:TIX4:JJEK:AV3F:VXAY:ASPC
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
```

```
$ docker --version
Docker version 20.10.18, build b40c2f6
```

以下のコマンドを実行し、一般ユーザ（opc）でDockerコマンドを実行できるようにする。

```
sudo usermod -aG docker opc
```

いったんログアウトして再度ログインする。

# Gitのインストール

```
$ sudo yum install git-all -y
Last metadata expiration check: 0:12:13 ago on Mon 19 Sep 2022 06:47:11 AM GMT.
Dependencies resolved.

・・・

Installed:
  apr-1.6.3-12.el8.x86_64                                                                        apr-util-1.6.1-6.el8.x86_64
  git-2.31.1-2.el8.x86_64                                                                        git-all-2.31.1-2.el8.noarch
  git-core-2.31.1-2.el8.x86_64                                                                   git-core-doc-2.31.1-2.el8.noarch
  git-credential-libsecret-2.31.1-2.el8.x86_64                                                   git-daemon-2.31.1-2.el8.x86_64
  git-email-2.31.1-2.el8.noarch                                                                  git-gui-2.31.1-2.el8.noarch
  git-instaweb-2.31.1-2.el8.noarch                                                               git-subtree-2.31.1-2.el8.x86_64
  git-svn-2.31.1-2.el8.noarch                                                                    gitk-2.31.1-2.el8.noarch
  gitweb-2.31.1-2.el8.noarch                                                                     httpd-2.4.37-47.0.2.module+el8.6.0+20724+119b489d.2.x86_64
  httpd-filesystem-2.4.37-47.0.2.module+el8.6.0+20724+119b489d.2.noarch                          httpd-tools-2.4.37-47.0.2.module+el8.6.0+20724+119b489d.2.x86_64
  libXft-2.3.3-1.el8.x86_64                                                                      libserf-1.3.9-9.module+el8.3.0+7671+a87d5147.x86_64
  mod_http2-1.15.7-5.module+el8.6.0+20548+01710940.x86_64                                        oracle-logos-httpd-84.5-1.0.1.el8.noarch
  perl-Authen-SASL-2.16-13.el8.noarch                                                            perl-CGI-4.38-2.el8.noarch
  perl-Compress-Raw-Bzip2-2.081-1.el8.x86_64                                                     perl-Compress-Raw-Zlib-2.081-1.el8.x86_64
  perl-Data-Dumper-2.167-399.el8.x86_64                                                          perl-Digest-1.17-395.el8.noarch
  perl-Digest-HMAC-1.03-17.module+el8.3.0+7692+542c56f9.noarch                                   perl-Digest-MD5-2.55-396.el8.x86_64
  perl-Digest-SHA-1:6.02-1.el8.x86_64                                                            perl-Encode-Locale-1.05-10.module+el8.3.0+7692+542c56f9.noarch
  perl-Error-1:0.17025-2.el8.noarch                                                              perl-GSSAPI-0.28-25.el8.x86_64
  perl-Git-2.31.1-2.el8.noarch                                                                   perl-Git-SVN-2.31.1-2.el8.noarch
  perl-HTML-Parser-3.72-15.module+el8.3.0+7692+542c56f9.x86_64                                   perl-HTML-Tagset-3.20-34.module+el8.3.0+7692+542c56f9.noarch
  perl-HTTP-Date-6.02-19.module+el8.3.0+7692+542c56f9.noarch                                     perl-HTTP-Message-6.18-1.module+el8.3.0+7692+542c56f9.noarch
  perl-IO-Compress-2.081-1.el8.noarch                                                            perl-IO-HTML-1.001-11.module+el8.3.0+7692+542c56f9.noarch
  perl-IO-Socket-IP-0.39-5.el8.noarch                                                            perl-IO-Socket-SSL-2.066-4.module+el8.6.0+20623+f0897f98.noarch
  perl-LWP-MediaTypes-6.02-15.module+el8.3.0+7692+542c56f9.noarch                                perl-MailTools-2.20-2.el8.noarch
  perl-Memoize-1.03-421.el8.noarch                                                               perl-Net-SMTP-SSL-1.04-5.el8.noarch
  perl-Net-SSLeay-1.88-2.module+el8.6.0+20623+f0897f98.x86_64                                    perl-TermReadKey-2.37-7.el8.x86_64
  perl-Time-HiRes-4:1.9758-2.el8.x86_64                                                          perl-TimeDate-1:2.30-15.module+el8.3.0+7692+542c56f9.noarch
  perl-URI-1.73-3.el8.noarch                                                                     perl-YAML-1.24-3.module+el8.1.0+5422+43f20e79.noarch
  perl-libnet-3.11-3.el8.noarch                                                                  subversion-1.10.2-5.module+el8.6.0+20670+d864ac37.x86_64
  subversion-libs-1.10.2-5.module+el8.6.0+20670+d864ac37.x86_64                                  subversion-perl-1.10.2-5.module+el8.6.0+20670+d864ac37.x86_64
  tcl-1:8.6.8-2.el8.x86_64                                                                       tk-1:8.6.8-1.el8.x86_64
  utf8proc-2.1.1-5.module+el8.3.0+7671+a87d5147.x86_64

Complete!
```

```
$ git --version
git version 2.31.1
```

# OCI CLIのインストール

https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__oraclelinux8

```
$ sudo dnf -y install oraclelinux-developer-release-el8
Last metadata expiration check: 0:15:35 ago on Mon 19 Sep 2022 06:47:11 AM GMT.
Package oraclelinux-developer-release-el8-1.0-7.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
$ sudo dnf install python36-oci-cli
Last metadata expiration check: 0:15:47 ago on Mon 19 Sep 2022 06:47:11 AM GMT.
Dependencies resolved.

・・・

Installed:
  python3-arrow-1.1.1-1.el8.noarch                 python3-jmespath-0.10.0-1.el8.noarch   python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch   python3-terminaltables-3.1.0-1.0.1.el8.noarch
  python3-typing-extensions-3.7.4.2-1.el8.noarch   python3-wcwidth-0.2.5-3.el8.noarch     python36-oci-cli-3.16.1-1.el8.noarch

Complete!
```

```
$ oci -v
3.16.1
```

## 初期設定
### ユーザのAPIキー作成

![ユーザー  Oracle Cloud Infrastructure - Google Chrome_2022-9-19_16-18-34vv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/a9f9fc55-8ac0-55db-372b-82e3839755b6.png)
秘密キーと公開キーをダウンロードします。

「追加」をクリックすると以下の画面になるので、「構成ファイルのプレビュー」をコピーします。

![ユーザー  Oracle Cloud Infrastructure - Google Chrome_2022-9-19_16-15-33vv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/c945d1b2-bd8b-61bd-29b7-ba216bf4f4e0.png)

### 設定ファイルの作成
コピーした内容を以下のファイルに保存します。

```
$ vim .oci/config
```

```.oci/config
[DEFAULT]
user=ocid1.user.oc1..aaaaaaaa4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fingerprint=24:4d:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
tenancy=ocid1.tenancy.oc1..aaaaaaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
region=ap-osaka-1
key_file=/home/opc/.oci/oci_api_key.pem #ここではこのファイル名で保存するので、ディレクトリを指定します。
```

### 秘密キーと公開キーの保存
ダウンロードした秘密キーと公開キーをそれぞれ以下のように保存します。

```
$ ls -l .oci/
total 12
-rw-------. 1 opc opc  299 Sep 19 07:19 config
-rw-------. 1 opc opc 1704 Sep 19 07:22 oci_api_key.pem
-rw-------. 1 opc opc  451 Sep 19 07:22 oci_api_key_public.pem
```

# kubectlのインストール
https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/

```
$ curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 42.9M  100 42.9M    0     0  36.7M      0  0:00:01  0:00:01 --:--:-- 36.7M
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
$ kubectl version --client --short
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Client Version: v1.25.1
Kustomize Version: v4.5.7
```

# Kubernetesクラスタへのアクセス
コンソール画面の「クラスタへのアクセス」をクリックします。

![Kubernetesクラスタ(OKE)  Oracle Cloud Infrastructure - Google Chrome_2022-9-19_16-24-0vv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/437508e3-27ab-4131-565b-2ce5303d8acc.png)

「ローカル・アクセス」の手順に沿って設定します。
今回はパブリックエンドポイントにアクセスします。

```
$ mkdir -p $HOME/.kube
$ oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.ap-osaka-1.aaaaaaaayxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --file $HOME/.kube/config --region ap-osaka-1 --token-version 2.0.0  --kube-endpoint PUBLIC_ENDPOINT
New config written to the Kubeconfig file /home/opc/.kube/config
$ export KUBECONFIG=$HOME/.kube/config
```

```
$ kubectl get node
NAME          STATUS   ROLES   AGE   VERSION
10.0.10.169   Ready    node    23h   v1.24.1
```