ほぼgithubのマニュアルそのままですが、まずは1台でmasterとminionを兼ねて作ってみます
https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/getting-started-guides/centos/centos_manual_config.md
バージョン
- CentOS-7.0-x86_64-Minimal
- docker 1.3.2
- kubernetes 0.9.0
- etcd 0.4.6
インストール
CentOS7-minimalをインストールしたVMを用意、ホスト名はcentos-masterにしています
Dockerをインストール
# yum update -y
# yum install docker
リポジトリを追加
# vi /etc/yum.repos.d/\_virt7-testing.repo
[virt7-testing]
name=virt7-testing
baseurl=http://cbs.centos.org/repos/virt7-testing/x86_64/os/
gpgcheck=0
kubernetesをインストール
# yum -y install --enablerepo=virt7-testing kubernetes
依存関係でetcdもインストールされる。etcdの0.4.6がインストールされればOK
2.0.1がインストールされた場合は、0.4.6を指定して再インストールする
# yum erase etcd
# yum install http://cbs.centos.org/kojifiles/packages/etcd/0.4.6/7.el7.centos/x86_64/etcd-0.4.6-7.el7.centos.x86_64.rpm
# yum -y install --enablerepo=virt7-testing kubernetes
ホスト名を登録
# echo "10.255.199.171 centos-master" >> /etc/hosts
kubernetesの設定
共通設定
masterにもminionにも共通の設定(今回は区別しませんが)
etcdのエンドポイント設定
# vi /etc/kubernetes/config
# Comma seperated list of nodes in the etcd cluster
- #KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:4001"
+ KUBE_ETCD_SERVERS="--etcd_servers=http://centos-master:4001"
ファイアウォール停止
# systemctl disable firewalld
# systemctl stop firewalld
masterの設定
APIserverの設定
# vi /etc/kubernetes/apiserver
# The address on the local server to listen to.
- #KUBE_API_ADDRESS="--address=127.0.0.1"
+ KUBE_API_ADDRESS="--address=0.0.0.0"
...
# How the replication controller and scheduler find the kube-apiserver
- #KUBE_MASTER="--master=127.0.0.1:8080"
+ KUBE_MASTER="--master=http://centos-master:8080"
※↑マニュアル通りKUBE_MASTER="--master=centos-master:8080"を指定すると
Failed to list *api.Service: Get centos-master:8080: unsupported protocol scheme "centos-master"
というエラーが出たのでこうしてます。
Minionのアドレスを指定。今回はmasterがminionを兼ねる
# vi /etc/kubernetes/controller-manager
# Comma seperated list of minions
- #KUBELET_ADDRESSES="--machines=127.0.0.1"
+ KUBELET_ADDRESSES="--machines=centos-master"
masterのサービス起動
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
下記エラーが発生
Unable to listen for secure (open /var/run/kubernetes/apiserver.crt: no such file or directory); will try again.
下記を参考に対応
http://ask.projectatomic.io/en/question/199/missing-apiservercrt-unable-to-listen-for-secure/
# vi /etc/systemd/system/kube-apiserver.service.d/10-varrun-build.conf
[Service]
# Run ExecStartPre with root-permissions
PermissionsStartOnly=true
ExecStartPre=-/usr/bin/mkdir /var/run/kubernetes
ExecStartPre=/usr/bin/chown -R kube:kube /var/run/kubernetes/
### minionの設定
kubeletの設定
# vi /etc/kubernetes/kubelet
# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
- #KUBELET_ADDRESS="--address=127.0.0.1"
+ KUBELET_ADDRESS="--address=0.0.0.0"
...
# You may leave this blank to use the actual hostname
- #KUBELET_HOSTNAME="--hostname_override=127.0.0.1"
+ KUBELET_HOSTNAME="--hostname_override=centos-master"
minionのサービス起動
# for SERVICES in kube-proxy kubelet docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
動作確認
# kubectl get minions
NAME LABELS STATUS
centos-master <none> Ready
# kubectl get pods
POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS
# kubectl get services
NAME LABELS SELECTOR IP PORT
kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.2 443
kubernetes-ro component=apiserver,provider=kubernetes <none> 10.254.0.1 80
# kubectl get replicationControllers
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
サンプルのguestbookを試してみる
githubのexamples/guestbook-goを試してみます
https://github.com/GoogleCloudPlatform/kubernetes/blob/master/examples/guestbook-go/README.md
# git clone kubernetes
# cd kubernetes/examples/guestbook-go
※examples/guestbookは以下の問題で上手く行かなかった
https://github.com/GoogleCloudPlatform/kubernetes/issues/4414
Redis MasterのReplicationControllerを作成。自動的にPodが作られる
# kubectl create -f redis-master-controller.json
redis-master-controller
# kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
redis-master-controller redis-master gurpartap/redis name=redis,role=master 1
# kubectl get pods
POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS
redis-master-controller-fplln 172.17.0.2 redis-master gurpartap/redis centos-master/10.255.199.171 name=redis,role=master Running
Redis MasterのServiceを作成
# kubectl create -f redis-master-service.json
redis-master
# kubectl get services
NAME LABELS SELECTOR IP PORT
kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.2 443
kubernetes-ro component=apiserver,provider=kubernetes <none> 10.254.0.1 80
redis-master <none> name=redis,role=master 10.254.138.228 6379
Redis SlaveのReplicationControllerを作成
# kubectl create -f redis-slave-controller.json
redis-slave-controller
# kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
redis-master-controller redis-master gurpartap/redis name=redis,role=master 1
redis-slave-controller redis-slave gurpartap/redis name=redis,role=slave 2
# kubectl get pods
POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS
redis-master-controller-fplln 172.17.0.2 redis-master gurpartap/redis centos-master/10.255.199.171 name=redis,role=master Running
redis-slave-controller-gziey 172.17.0.3 redis-slave gurpartap/redis centos-master/10.255.199.171 name=redis,role=slave Running
redis-slave-controller-oh43e 172.17.0.4 redis-slave gurpartap/redis centos-master/10.255.199.171 name=redis,role=slave Running
Redis SlaveのServiceを作成
# kubectl create -f redis-slave-service.json
redis-slave
# kubectl get services
NAME LABELS SELECTOR IP PORT
kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.2 443
kubernetes-ro component=apiserver,provider=kubernetes <none> 10.254.0.1 80
redis-master <none> name=redis,role=master 10.254.138.228 6379
redis-slave name=redis,role=slave name=redis,role=slave 10.254.49.145 6379
Frontendの設定ファイルを編集。今回はローカルに作っているのでExternalLoadBalancerの代わりにpublicIPを指定する
# vi guestbook-service.json
"port": 3000,
"containerPort": "http-server",
"selector": { "name": "guestbook" },
- "createExternalLoadBalancer": true
+ "publicIPs":["your-public-ip"]
FrontendのReplicationControllerを作成
# kubectl create -f guestbook-controller.json
guestbook-controller
# kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
guestbook-controller guestbook kubernetes/guestbook name=guestbook 3
redis-master-controller redis-master gurpartap/redis name=redis,role=master 1
redis-slave-controller redis-slave gurpartap/redis name=redis,role=slave 2
# kubectl get pods
POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS
guestbook-controller-0133o 172.17.0.5 guestbook kubernetes/guestbook centos-master/10.255.199.171 name=guestbook Running
guestbook-controller-hh2gd 172.17.0.7 guestbook kubernetes/guestbook centos-master/10.255.199.171 name=guestbook Running
guestbook-controller-ls6k1 172.17.0.6 guestbook kubernetes/guestbook centos-master/10.255.199.171 name=guestbook Running
redis-master-controller-fplln 172.17.0.2 redis-master gurpartap/redis centos-master/10.255.199.171 name=redis,role=master Running
redis-slave-controller-gziey 172.17.0.3 redis-slave gurpartap/redis centos-master/10.255.199.171 name=redis,role=slave Running
redis-slave-controller-oh43e 172.17.0.4 redis-slave gurpartap/redis centos-master/10.255.199.171 name=redis,role=slave Running
FrontendのServiceを作成
# kubectl create -f guestbook-service.json
guestbook
# kubectl get services
NAME LABELS SELECTOR IP PORT
guestbook <none> name=guestbook 10.254.166.244 3000
kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.2 443
kubernetes-ro component=apiserver,provider=kubernetes <none> 10.254.0.1 80
redis-master <none> name=redis,role=master 10.254.138.228 6379
redis-slave name=redis,role=slave name=redis,role=slave 10.254.49.145 6379
ブラウザからFrontendの設定ファイルに指定したyour-public-ip:3000にアクセス
問題が無ければ、guestbookの画面が表示され、利用することができる