在一台运行着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的界面并且可以使用它。