オフラインのCentOS 7にMinikube環境を構築する

[CentOS 7にMinikube環境を構築する](https://qiita.com/sotoiwa/items/27a3e55588cd747bcf21)

オフラインで環境を作る方法を確認したメモ。別途上記手順で作成したオンラインのMinikube環境があるとして、そこで必要なものをダウンロードしてオフライン環境に持ち込む。

## オンライン環境でのファイルの準備

移動してくる必要があるものは以下。

- dockerのrpm
  - docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
  - docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
- CLI等のバイナリ
  - kubectl
  - minikube
  - crictl
  - helm
  - kubeadm
  - kubelet
- Dockerイメージ

### dockerのrpm

オンラインの環境でyumdownloaderを使ってrpmをダウンロードする。

```
sudo yum install yum-utils
sudo yumdownloader --resolve docker-ce-17.03.2.ce docker-ce-selinux-17.03.2.ce
```

### CLI等のバイナリ

kubectl、minikube、crictlをそれぞれオンライン環境でダウンロードする。

```
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
VERSION="v0.30.0"
curl -Lo minikube https://storage.googleapis.com/minikube/releases/$VERSION/minikube-linux-amd64
VERSION="v1.12.0"
curl -LO https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
VERSION="v2.11.0"
curl -LO https://storage.googleapis.com/kubernetes-helm/helm-$VERSION-linux-amd64.tar.gz
```

kubeadmとkubeletは`minikube start`をしたときにダウンロードされているのでこれを取得する。

```shell-session
[root@minikube v1.11.1]# pwd
/root/.minikube/cache/v1.11.1
[root@minikube v1.11.1]# ls -l
合計 215264
-rw-------. 1 root root  57394285 10月 19 05:38 kubeadm
-rw-------. 1 root root 163031056 10月 19 05:38 kubelet
[root@minikube v1.11.1]#
```

### Dockerイメージ

Minikubeのaddonをオフライン環境で使いたい場合は、オンライン環境でaddonを有効にしてイメージをダウンロードさせておく。今回はheapster、ingress、registryを追加で有効にした。

```shell-session
[root@minikube ~]# minikube addons list
- addon-manager: enabled
- coredns: enabled
- dashboard: enabled
- default-storageclass: enabled
- efk: disabled
- freshpod: disabled
- heapster: enabled
- ingress: enabled
- kube-dns: disabled
- metrics-server: disabled
- nvidia-driver-installer: disabled
- nvidia-gpu-device-plugin: disabled
- registry: enabled
- registry-creds: disabled
- storage-provisioner: enabled
[root@minikube ~]#
```

Helmを使う場合はtillerもデプロイしておく。

#### 全部移動する場合

オフライン環境にあるイメージを全て保管する。

```shell-session
[root@minikube ~]# docker images --format "{{.Repository}}:{{.Tag}}"
gcr.io/kubernetes-helm/tiller:v2.11.0
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0
k8s.gcr.io/coredns:1.2.2
k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
k8s.gcr.io/kube-proxy-amd64:v1.11.1
k8s.gcr.io/kube-apiserver-amd64:v1.11.1
k8s.gcr.io/kube-scheduler-amd64:v1.11.1
k8s.gcr.io/kube-controller-manager-amd64:v1.11.1
k8s.gcr.io/coredns:1.1.3
k8s.gcr.io/heapster-amd64:v1.5.3
k8s.gcr.io/etcd-amd64:3.2.18
k8s.gcr.io/kube-addon-manager:v8.6
k8s.gcr.io/pause:3.1
gcr.io/k8s-minikube/storage-provisioner:v1.8.1
gcr.io/google_containers/defaultbackend:1.4
k8s.gcr.io/heapster-influxdb-amd64:v1.3.3
k8s.gcr.io/heapster-grafana-amd64:v4.4.3
registry.hub.docker.com/library/registry:2.6.1
[root@minikube ~]#
```

これらイメージを`docker save`でファイルに保存する。

```
docker images --format "{{.Repository}}:{{.Tag}}" | while read image
do
  tag=${image##*:}
  repo=${image%%:*}
  name=${repo##*/}
  filename=${name}_${tag}.tar
  #echo $filename
  docker save $image -o $filename
done
```

#### 選ぶ場合

オンライン環境で使っているイメージを確認する。

楽に確認したいのでjqを入れる。

```
sudo curl -o /usr/local/bin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && sudo chmod +x /usr/local/bin/jq
```

```shell-session
[root@minikube ~]# kubectl get po --all-namespaces -o json | jq -r '.items[].spec.containers[].image'
k8s.gcr.io/coredns:1.2.2
gcr.io/google_containers/defaultbackend:1.4
k8s.gcr.io/etcd-amd64:3.2.18
k8s.gcr.io/heapster-amd64:v1.5.3
k8s.gcr.io/heapster-influxdb-amd64:v1.3.3
k8s.gcr.io/heapster-grafana-amd64:v4.4.3
k8s.gcr.io/kube-addon-manager:v8.6
k8s.gcr.io/kube-apiserver-amd64:v1.11.1
k8s.gcr.io/kube-controller-manager-amd64:v1.11.1
k8s.gcr.io/kube-proxy-amd64:v1.11.1
k8s.gcr.io/kube-scheduler-amd64:v1.11.1
k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0
registry.hub.docker.com/library/registry:2.6.1
gcr.io/k8s-minikube/storage-provisioner:v1.8.1
gcr.io/kubernetes-helm/tiller:v2.11.0
[root@minikube ~]#
```

これらイメージを`docker save`でファイルに保存する。

```
kubectl get po --all-namespaces -o json | jq -r '.items[].spec.containers[].image' | while read image
do
  tag=${image##*:}
  repo=${image%%:*}
  name=${repo##*/}
  filename=${name}_${tag}.tar
  #echo $filename
  docker save $image -o $filename
done
```

これでよいかと思ったら、以下のイメージも必要だったのでsaveすること。

- k8s.gcr.io/pause:3.1
- k8s.gcr.io/coredns:1.1.3

```
docker save k8s.gcr.io/coredns:1.1.3 -o coredns_1.1.3.tar
docker save k8s.gcr.io/pause:3.1 -o pause-amd64_3.1.tar
```

## オフライン環境の準備

Vagrantで試す。オフライン環境といってもCentOS標準のパッケージはインストールできる環境にあるとする。

```
mkdir minikube-centos
vagrant init centos/7
```

`Vagrantfile`を編集し、以下のコメントアウトを外してプライベートネットワークを有効にする。

```
  config.vm.network "private_network", ip: "192.168.33.10"
```

メモリーの容量も大きくする。

```
  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
      vb.memory = "2048"
  end
```

仮想マシンを起動。

```
vagrant up
```

`vagrant ssh`だとこのあとインターフェースをダウンしたときに接続が切れてしまうため、先ほど指定したプライベートネットワークのIPを使用してsshログインする。

以下のコマンドでNATネットワークのインターフェースをダウンしてオフライン環境にする。

```
sudo ip l set eth0 down
```

（実行例）

```shell-session
[vagrant@localhost ~]$ ip a
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c0:42:d5 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 86340sec preferred_lft 86340sec
    inet6 fe80::5054:ff:fec0:42d5/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:88:2e:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.10/24 brd 192.168.33.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe88:2ef5/64 scope link
       valid_lft forever preferred_lft forever
[vagrant@localhost ~]$
[vagrant@localhost ~]$
[vagrant@localhost ~]$ ping yahoo.co.jp -c 3
PING yahoo.co.jp (183.79.135.206) 56(84) bytes of data.
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=1 ttl=63 time=31.9 ms
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=2 ttl=63 time=32.7 ms
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=3 ttl=63 time=32.4 ms

--- yahoo.co.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 31.911/32.401/32.797/0.396 ms
[vagrant@localhost ~]$
[vagrant@localhost ~]$
[vagrant@localhost ~]$ sudo ip l set eth0 down
[vagrant@localhost ~]$
[vagrant@localhost ~]$
[vagrant@localhost ~]$ ping yahoo.co.jp -c 3
ping: yahoo.co.jp: Name or service not known
[vagrant@localhost ~]$
[vagrant@localhost ~]$
```

オフラインにしたときにデフォルトゲートウェイがなくなってしまうのでルートを追加しておく。

```
sudo ip route add default via 192.168.33.1
```

実際のオフライン環境ではCentOSの標準のパッケージはメディアをマウントしてインストールしていると思うので、CentOSの標準のパッケージをインストールしたいときはインターフェースを一時的にonにする。

```
sudo ip l set eth0 up
```

これでオフラインの環境がローカルで再現できた。

## オフライン環境へのインストール

ここから先は以下の手順のオフライン版。

[CentOS 7にMinikube環境を構築する](https://qiita.com/sotoiwa/items/27a3e55588cd747bcf21)

### OSの基本的な準備

ホスト名を設定する。

```
sudo hostnamectl set-hostname --static offline-kube
```

ホスト名が解決できるようにする。

```
sudo vi /etc/hostname
```

```:/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

offline-kube 192.168.33.10
```

### Dockerのインストール

前提パッケージのインストール。

```
sudo ip l set eth0 up
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
sudo ip l set eth0 down
```

以下も依存パッケージとして必要だったので入れる。

```
sudo ip l set eth0 up
sudo yum install -y libcgroup policycoreutils-python
sudo ip l set eth0 down
```

オンライン環境から持ってきたrpmでDockerをインストールする。以下は`rpm -Uvh`だが`yum localinstall`でもよいかも。

```shell-session
[vagrant@offline-kube docker]$ ls -l
total 19104
-rw-r--r--. 1 vagrant vagrant 19529520 Jun  8 17:48 docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
-rw-r--r--. 1 vagrant vagrant    29108 Jun  8 17:48 docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
[vagrant@offline-kube docker]$ sudo rpm -Uvh docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
warning: docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:docker-ce-selinux-17.03.2.ce-1.el################################# [ 50%]
Re-declaration of type docker_t
Failed to create node
Bad type declaration at /etc/selinux/targeted/tmp/modules/400/docker/cil:1
/usr/sbin/semodule:  Failed!
restorecon:  lstat(/var/lib/docker) failed:  No such file or directory
warning: %post(docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch) scriptlet failed, exit status 255
   2:docker-ce-17.03.2.ce-1.el7.centos################################# [100%]
[vagrant@offline-kube docker]$
```

Dockerデーモンを有効化して起動する。

```
sudo systemctl enable docker && sudo systemctl start docker
```

vagrantユーザーでdockerコマンドが使えるようにする。

```
sudo gpasswd -a vagrant docker
```

有効にするにはログインし直す必要あり。

### CLIを配置する

オンライン環境から持ってきたkubectl、minikube、crictl、helmを`/usr/local/bin`に配置する。

```shell-session
[vagrant@offline-kube cli]$ ls -l
total 156280
-rwxr-xr-x. 1 vagrant vagrant 28312149 Sep 25 11:19 crictl
-rwxr-xr-x. 1 vagrant vagrant 32062656 Oct 19 11:37 helm
-rwxr-xr-x. 1 vagrant vagrant 57352138 Oct 18 10:08 kubectl
-rwxr-xr-x. 1 vagrant vagrant 42296421 Oct 18 11:20 minikube
[vagrant@offline-kube cli]$ sudo cp * /usr/local/bin/
[vagrant@offline-kube cli]$ ls -l /usr/local/bin/
total 156280
-rwxr-xr-x. 1 root root 28312149 Oct 19 12:02 crictl
-rwxr-xr-x. 1 root root 32062656 Oct 19 12:02 helm
-rwxr-xr-x. 1 root root 57352138 Oct 19 12:02 kubectl
-rwxr-xr-x. 1 root root 42296421 Oct 19 12:02 minikube
[vagrant@offline-kube cli]$
```

### socatとebtablesのインストール

socatとeptablesをインストールする。eptablesは入ってた。

```
sudo ip l set eth0 up
sudo yum install -y socat ebtables
sudo ip l set eth0 down
```

### /usr/local/binにパスを通す

```
sudo visudo
```

```
# Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/local/bin:/usr/bin

```

### その他

swapを無効にする。

```
swapoff -a
```

`/etc/fstab`を編集して再起動後もスワップが無効になるようにする。

```
sudo vi /etc/fstab
```

以下行をコメントアウトする。

```
# /swapfile none swap defaults 0 0
```

SELinuxをPermissiveにする。

```
sudo setenforce Permissive
```

再起動後もPermissiveとなるように`/etc/selinux/config`を編集する。

```
sudo vi /etc/selinux/config
```

```
#SELINUX=enforcing
SELINUX=permissive
```

再起動してpermissiveなことを確認。

```shell-session
[vagrant@offline-kube ~]$ getenforce
Permissive
[vagrant@offline-kube ~]$
```

Firewalldを停止する。今回はもともと停止していた。

再起動するとインターフェースがupになるので注意。

```
sudo ip l set eth0 down
```

### kubeadmとkubeletの配置

Minikubeを起動した際にダウンロードされるkubeadmとkubeletをあらかじめ配置する。今回はMinikubeはrootで起動するものとして、rootのホームディレクトリーにあらかじめディレクトリーを作成して配置する。

```shell-session
[vagrant@offline-kube kubeadm]$ ls -l
total 215264
-rw-------. 1 vagrant vagrant  57394285 Oct 19 05:38 kubeadm
-rw-------. 1 vagrant vagrant 163031056 Oct 19 05:38 kubelet
[vagrant@offline-kube kubeadm]$ sudo mkdir -p /root/.minikube/cache/v1.11.1
[vagrant@offline-kube kubeadm]$ sudo cp * /root/.minikube/cache/v1.11.1
[vagrant@offline-kube kubeadm]$ sudo ls -l /root/.minikube/cache/v1.11.1
total 215264
-rw-------. 1 root root  57394285 Oct 19 12:04 kubeadm
-rw-------. 1 root root 163031056 Oct 19 12:04 kubelet
[vagrant@offline-kube kubeadm]$
```

### Dockerイメージのロード

ファイルのあるディレクトリで以下を実行。

```
for file in *; do
  #echo $file
  docker load -i "${file}"
done
```

（実行例）

```shell-session
[vagrant@offline-kube image]$ ls -l
total 1822392
-rw-------. 1 vagrant vagrant  46233600 Oct 19 11:44 coredns_1.1.3.tar
-rw-------. 1 vagrant vagrant  39493632 Oct 19 11:44 coredns_1.2.2.tar
-rw-------. 1 vagrant vagrant   4855808 Oct 19 11:45 defaultbackend_1.4.tar
-rw-------. 1 vagrant vagrant 219150848 Oct 19 11:44 etcd-amd64_3.2.18.tar
-rw-------. 1 vagrant vagrant  75337216 Oct 19 11:44 heapster-amd64_v1.5.3.tar
-rw-------. 1 vagrant vagrant 154733056 Oct 19 11:45 heapster-grafana-amd64_v4.4.3.tar
-rw-------. 1 vagrant vagrant  12775936 Oct 19 11:45 heapster-influxdb-amd64_v1.3.3.tar
-rw-------. 1 vagrant vagrant  80657920 Oct 19 11:45 kube-addon-manager_v8.6.tar
-rw-------. 1 vagrant vagrant 186907136 Oct 19 11:44 kube-apiserver-amd64_v1.11.1.tar
-rw-------. 1 vagrant vagrant 155483648 Oct 19 11:44 kube-controller-manager-amd64_v1.11.1.tar
-rw-------. 1 vagrant vagrant  99635712 Oct 19 11:44 kube-proxy-amd64_v1.11.1.tar
-rw-------. 1 vagrant vagrant  57012736 Oct 19 11:44 kube-scheduler-amd64_v1.11.1.tar
-rw-------. 1 vagrant vagrant 123058176 Oct 19 11:44 kubernetes-dashboard-amd64_v1.10.0.tar
-rw-------. 1 vagrant vagrant 419246592 Oct 19 11:44 nginx-ingress-controller_0.19.0.tar
-rw-------. 1 vagrant vagrant    754176 Oct 19 11:45 pause_3.1.tar
-rw-------. 1 vagrant vagrant  35672064 Oct 19 11:45 registry_2.6.1.tar
-rw-------. 1 vagrant vagrant  80827392 Oct 19 11:45 storage-provisioner_v1.8.1.tar
-rw-------. 1 vagrant vagrant  74257408 Oct 19 11:44 tiller_v2.11.0.tar
[vagrant@offline-kube image]$ for file in *; do
>   #echo $file
>   docker load -i "${file}"
> done
5bef08742407: Loading layer [==================================================>] 4.221 MB/4.221 MB
594f5d257cbe: Loading layer [==================================================>] 9.335 MB/9.335 MB
53cb05deeb1b: Loading layer [==================================================>] 32.66 MB/32.66 MB
Loaded image: k8s.gcr.io/coredns:1.1.3

（省略）

ebf12965380b: Loading layer [==================================================>] 4.464 MB/4.464 MB
40c8df9d5f21: Loading layer [==================================================>] 6.006 MB/6.006 MB
9901d78f5d18: Loading layer [==================================================>] 32.06 MB/32.06 MB
73efe6a41873: Loading layer [==================================================>]  31.7 MB/31.7 MB
Loaded image: gcr.io/kubernetes-helm/tiller:v2.11.0
[vagrant@offline-kube image]$
```

### Minikubeの起動

準備ができたので起動する。

```
sudo -i
minikube start --vm-driver=none --kubernetes-version=v1.11.1
```

```shell-session
[root@offline-kube ~]# minikube start --vm-driver=none --kubernetes-version=v1.11.1
Starting local Kubernetes v1.11.1 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
===================
WARNING: IT IS RECOMMENDED NOT TO RUN THE NONE DRIVER ON PERSONAL WORKSTATIONS
	The 'none' driver will run an insecure kubernetes apiserver as root that may leave the host vulnerable to CSRF attacks

When using the none driver, the kubectl config and credentials generated will be root owned and will appear in the root home directory.
You will need to move the files to the appropriate location and then set the correct permissions.  An example of this is below:

	sudo mv /root/.kube $HOME/.kube # this will write over any previous configuration
	sudo chown -R $USER $HOME/.kube
	sudo chgrp -R $USER $HOME/.kube

	sudo mv /root/.minikube $HOME/.minikube # this will write over any previous configuration
	sudo chown -R $USER $HOME/.minikube
	sudo chgrp -R $USER $HOME/.minikube

This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true
Loading cached images from config file.
[root@offline-kube ~]#
```

addonを有効にする

```shell-session
[root@offline-kube ~]# minikube addons enable heapster
heapster was successfully enabled
[root@offline-kube ~]# minikube addons enable ingress
ingress was successfully enabled
[root@offline-kube ~]# minikube addons enable registry
registry was successfully enabled
[root@offline-kube ~]#
```

```shell-session
[root@offline-kube ~]# minikube addons list
- addon-manager: enabled
- coredns: enabled
- dashboard: enabled
- default-storageclass: enabled
- efk: disabled
- freshpod: disabled
- heapster: enabled
- ingress: enabled
- kube-dns: disabled
- metrics-server: disabled
- nvidia-driver-installer: disabled
- nvidia-gpu-device-plugin: disabled
- registry: enabled
- registry-creds: disabled
- storage-provisioner: enabled
[root@offline-kube ~]#
```

稼働確認。

```shell-session
[root@offline-kube ~]# kubectl get po -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
coredns-99b9bb8bd-q8qm2                    1/1     Running   0          14m
default-http-backend-ddc5ff66b-htpf8       1/1     Running   0          11m
etcd-minikube                              1/1     Running   0          14m
heapster-plns5                             1/1     Running   0          12m
influxdb-grafana-n6p5j                     2/2     Running   0          12m
kube-addon-manager-minikube                1/1     Running   0          14m
kube-apiserver-minikube                    1/1     Running   0          13m
kube-controller-manager-minikube           1/1     Running   0          14m
kube-proxy-j2ksf                           1/1     Running   0          14m
kube-scheduler-minikube                    1/1     Running   0          14m
kubernetes-dashboard-7db4dc666b-22rch      1/1     Running   0          14m
nginx-ingress-controller-89797c44c-kfczg   1/1     Running   0          11m
registry-ggdmt                             1/1     Running   0          11m
storage-provisioner                        1/1     Running   0          14m
[root@offline-kube ~]#
```

### Helmの初期化

Helmの初期化を実行する。インターネットに行こうとして失敗する。

```
[root@offline-kube ~]# helm init
Creating /root/.helm
Creating /root/.helm/repository
Creating /root/.helm/repository/cache
Creating /root/.helm/repository/local
Creating /root/.helm/plugins
Creating /root/.helm/starters
Creating /root/.helm/cache/archive
Creating /root/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Error: Looks like "https://kubernetes-charts.storage.googleapis.com" is not a valid chart repository or cannot be reached: Get https://kubernetes-charts.storage.googleapis.com/index.yaml: dial tcp: lookup kubernetes-charts.storage.googleapis.com on [::1]:53: read udp [::1]:37958->[::1]:53: read: connection refused
[root@offline-kube ~]#
```

空のリポジトリー定義ファイルを作成してもう一度実行。

```
touch /root/.helm/repository/repositories.yaml
```

```
[root@offline-kube ~]# touch /root/.helm/repository/repositories.yaml
[root@offline-kube ~]# helm init
Updating repository file format...
$HELM_HOME has been configured at /root/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!
[root@offline-kube ~]#
```

tillerのPodが稼働していることを確認。

```
[root@offline-kube ~]# kubectl get po -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
coredns-99b9bb8bd-q8qm2                    1/1     Running   0          18m
default-http-backend-ddc5ff66b-htpf8       1/1     Running   0          16m
etcd-minikube                              1/1     Running   0          18m
heapster-plns5                             1/1     Running   0          17m
influxdb-grafana-n6p5j                     2/2     Running   0          17m
kube-addon-manager-minikube                1/1     Running   0          18m
kube-apiserver-minikube                    1/1     Running   0          18m
kube-controller-manager-minikube           1/1     Running   0          18m
kube-proxy-j2ksf                           1/1     Running   0          19m
kube-scheduler-minikube                    1/1     Running   0          18m
kubernetes-dashboard-7db4dc666b-22rch      1/1     Running   0          18m
nginx-ingress-controller-89797c44c-kfczg   1/1     Running   0          16m
registry-ggdmt                             1/1     Running   0          16m
storage-provisioner                        1/1     Running   0          18m
tiller-deploy-7f4974b9c8-zh2vf             1/1     Running   0          3m
[root@offline-kube ~]#
```

以上で一応完了なはず。