在一台运行着CentOS 7的机器上尝试使用Kubernetes
几乎是完全按照GitHub上的手册来做,首先尝试在一台机器上同时创建master和minion。
版本
-
- CentOS-7.0-x86_64-Minimal
-
- docker 1.3.2
-
- kubernetes 0.9.0
- etcd 0.4.6
安装
我准备了一个安装了CentOS 7-minimal的虚拟机,并将主机名设置为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配置
共同设定
师傅和爪牛都有共同的设定(这次不区分)
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
大师的设置
API服务器的设置
# 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"
主人的服务启动
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
发生以下错误
无法侦听安全 (打开 /var/run/kubernetes/apiserver.crt: 没有此文件或目录);将尝试再次。
参考以下解决方法
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/
小黄人的设定
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"
小黄人的服务开始
# 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
让我们试试一下样本留言簿
我将尝试使用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从节点服务
# 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
編集前端設定檔案。由於本次是在本機上進行,因此指定publicIP來替代ExternalLoadBalancer。
# vi guestbook-service.json
"port": 3000,
"containerPort": "http-server",
"selector": { "name": "guestbook" },
- "createExternalLoadBalancer": true
+ "publicIPs":["your-public-ip"]
创建前端的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
创建前端服务
# 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
如果没有问题,通过浏览器访问到在前端设置文件中指定的your-public-ip:3000。你将能够看到guestbook的界面并且可以使用它。