LoginSignup
13
14

More than 5 years have passed since last update.

kubernetes自体をdockerで立てる(AWS EC2)hyperkube

Last updated at Posted at 2016-02-26

kubernetesの構築方法は色々あるが、CentOSの場合は7が推奨されている。
例えばCentOS6や、EC2 Amazon Linuxでは実現できないか?というと、kubernetes自体をdockerベースで起動する方法がある。「Hyperkube」
Amazon Linux上で試してみた。

基本は以下をベースにしてます。
1ホスト上での実装です。

前提条件としてEC2(Amazon Linux)を起動する。

1. dockerをインストール

参照
http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/docker-basics.html

2. etcdコンテナを起動

docker run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data

gcr.io/google_containers/etcd:<バージョン>は、etcdのdocker image
127.0.0.1:4001はetcdの待ち受けアドレスとport。
etcd APIで以下のようにうつと、応答が返ってくる

$ curl -L http://127.0.0.1:4001/v2/keys/
{"action":"get","node":{"dir":true,"nodes":[{"key":"/registry","dir":true,"modifiedIndex":3,"createdIndex":3}]}}

3. kubernetesコンテナを起動

docker run \
    --volume=/:/rootfs:ro \
    --volume=/sys:/sys:ro \
    --volume=/dev:/dev \
    --volume=/var/lib/docker/:/var/lib/docker:ro \
    --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
    --volume=/var/run:/var/run:rw \
    --net=host \
    --pid=host \
    --privileged=true \
    -d \
    gcr.io/google_containers/hyperkube:v1.1.3 \
    /hyperkube kubelet --containerized --hostname-override="127.0.0.1" \
                       --address="0.0.0.0" --api-servers=http://localhost:8080 \
                       --config=/etc/kubernetes/manifests

以下はproxy用

docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.1.3 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2

gcr.io/google_containers/hyperkube:<バージョン>はkubernetesのコンテナイメージで、起動すると以下のKubernetesコンポーネントが起動する

・scheduler
・controller-manager
・kubelet
・apiserver
・kube-proxy

※単一ホスト実装なので、flannelは不要

各種コンテナが起動できていることを確認

$ docker ps
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
1db67e19cc50        gcr.io/google_containers/hyperkube:v1.1.3   "/hyperkube proxy --m"   50 minutes ago      Up 50 minutes                           cranky_engelbart
81e0be46543a        gcr.io/google_containers/hyperkube:v1.1.3   "/hyperkube scheduler"   50 minutes ago      Up 50 minutes                           k8s_scheduler.ed57faf5_k8s-master-127.0.0.1_default_e1376f76a07b85e8b0e4c363ff0fa6c1_a334614a
c6a5b65fa2de        gcr.io/google_containers/hyperkube:v1.1.3   "/hyperkube apiserver"   50 minutes ago      Up 50 minutes                           k8s_apiserver.9de8159f_k8s-master-127.0.0.1_default_e1376f76a07b85e8b0e4c363ff0fa6c1_ba3240b4
a839d533cb47        gcr.io/google_containers/hyperkube:v1.1.3   "/hyperkube controlle"   50 minutes ago      Up 50 minutes                           k8s_controller-manager.6994021e_k8s-master-127.0.0.1_default_e1376f76a07b85e8b0e4c363ff0fa6c1_eb4414a0
12cf8eb4f9eb        gcr.io/google_containers/pause:0.8.0        "/pause"                 51 minutes ago      Up 51 minutes                           k8s_POD.6d00e006_k8s-master-127.0.0.1_default_e1376f76a07b85e8b0e4c363ff0fa6c1_eeb73b8e
f8280ca30a7c        gcr.io/google_containers/hyperkube:v1.1.3   "/hyperkube kubelet -"   51 minutes ago      Up 51 minutes                           suspicious_mayer
22767776b131        gcr.io/google_containers/etcd:2.0.13        "/usr/local/bin/etcd "   51 minutes ago      Up 51 minutes                           insane_ardinghelli

4. kubectlをインストール

ホストサーバからkubectlコマンドを実行できるように、これだけホストにインストールする。

kubectlバイナリをダウンロード

wget https://storage.googleapis.com/kubernetes-release/release/v1.0.1/bin/linux/amd64/kubectl

バイナリを権限を変えて移動

chmod +x kubectl
mv kubectl /usr/local/bin/

5. 動作確認

$ kubectl get nodes
NAME        LABELS                             STATUS
127.0.0.1   kubernetes.io/hostname=127.0.0.1   Ready

minionノード(コンテナ)がReadyで認識されてればOK

備考

オフライン環境でkubernetesクラスタを構築するため、一度オンライン環境でpullしたhyperkubeをtar.gz形式でエクスポートし、インターネット接続のないサーバへオフラインで移動させて、オフラインサーバでdocker runしてみたが、proxyやapiserverなど、ほとんどのコンテナが起動しなかった。
kubectl logsコマンドで状態を確認したところ、docker run時にgcr.ioへの接続失敗のようなエラーログが確認された。おそらくrun実行時に外部へアクセスする必要がある模様。
つまり、hyperkubeのdocker imageをDLしてオフライン環境で実行しても、正しく利用できなった。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14