kubernetes安装配置

kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成

  etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 minion上运行的docker拥有不同的ip段,最终目的是使不同minion上正在运行的docker containner都有一个与别的任意一个containner(别的minion上运行的docker containner)不一样的IP地址。

  flannel: 网络结构支持

  kube-apiserver: 不论通过kubectl还是使用remote api 直接控制,都要经过apiserver

  kube-controller-manager: 对replication controller, endpoints controller, namespace controller, and serviceaccounts controller的循环控制,与kube-apiserver交互,保证这些controller工作

  kube-scheduler: Kubernetes scheduler的作用就是根据特定的调度算法将pod调度到指定的工作节点(minion)上,这一过程也叫绑定(bind)

  kubelet: Kubelet运行在Kubernetes Minion Node上. 它是container agent的逻辑继任者

  kube-proxy: kube-proxy是kubernetes 里运行在minion节点上的一个组件, 它起的作用是一个服务代理的角色

图为GIT+Jenkins+Kubernetes+Docker+Etcd+confd+Nginx+Glusterfs架构

如下:

环境:

centos7系统机器三台:

    192.168.1.165: 用来安装kubernetes master

    192.168.1.247: 用作kubernetes minion (minion1)


一、关闭系统运行的防火墙及selinux

1。如果系统开启了防火墙则按如下步骤关闭防火墙(所有机器)

# systemctl stop firewalld # systemctl disable firewalld

2.关闭selinux

1
2
#setenforce 0
#sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux

二、MASTER安装配置

1. 安装并配置Kubernetes master(yum 方式)

1
# yum -y install etcd kubernetes

    

 配置etcd。确保列出的这些项都配置正确并且没有被注释掉,下面的配置都是如此 

1
2
3
4
5
6
#vim /etc/etcd/etcd.conf

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_NAME="default"

ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"


配置kubernetes



vim /etc/kubernetes/apiserver

KUBE_API_ADDRESS="--address=0.0.0.0"

KUBE_API_PORT="--port=8080"

KUBELET_PORT="--kubelet_port=10250"

KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.1.165:2379"

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

KUBE_API_ARGS=""

 

2. 启动etcd, kube-apiserver, kube-controller-manager and kube-scheduler服务

1
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES ;systemctl enable $SERVICES ;systemctl status $SERVICES done; 

3.设置etcd网络


1

#etcdctl -C 192.168.1.165:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

报错如下:

parse 192.168.1.165:2379: first path segment in URL cannot contain colon

解决方法:

etcdctl -C http://127.0.0.1:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

{"Network":"10.1.0.0/16"}


4. 至此master配置完成,运行kubectl get nodes可以查看有多少minion在运行,以及其状态。这里我们的minion还都没有开始安装配置,所以运行之后结果为空

1
# kubectl get nodes status


三、MINION安装配置(每台minion机器都按如下安装配置)

1. 环境安装和配置

1
# yum -y install flannel kubernetes

  配置kubernetes连接的服务端IP

1
2
3
#vim /etc/kubernetes/config 修改以下两个配置项

KUBE_MASTER="--master=http://192.168.1.165:8080"

KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.1.165:2379"


  配置kubernetes  ,(请使用每台minion自己的IP地址比如192.168.1.247:代替下面的$LOCALIP)

1
2
3
4
5

#vim /etc/kubernetes/kubelet 红色标记的要调整,具体看后面的步骤,否则创建pod会失败。

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_HOSTNAME="--hostname-override=192.168.1.247"

KUBELET_API_SERVER="--api-servers=http://192.168.1.165:8080"

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

KUBELET_ARGS=""



2. 准备启动服务(如果本来机器上已经运行过docker的请看过来,没有运行过的请忽略此步骤)

    运行ifconfig,查看机器的网络配置情况(有docker0)

1
2
3
4
5
# ifconfig docker0
Link encap:Ethernet HWaddr 02:42:B2:75:2E:67 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP
BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0
errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

  warning:在运行过docker的机器上可以看到有docker0,这里在启动服务之前需要删掉docker0配置,在命令行运行:sudo ip link delete docker0

3.配置flannel网络

1
2
3
#vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://192.168.1.165:2379"

FLANNEL_ETCD_PREFIX="/atomic.io/network"

PS:其中atomic.io与上面etcd中的Network对应

4. 启动服务

1
# for SERVICES in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICES ;systemctl enable $SERVICES ;systemctl status $SERVICES; done

四、配置完成验证安装

    确定minion(192.168.1.247)和一台master(192.168.1.165)都已经成功的安装配置并且服务都已经启动了。

    切换到master机器上,运行命令kubectl get nodes 

1
2
3
4
# kubectl get nodes

NAME            STATUS    AGE

192.168.1.247   Ready     6h

  可以看到配置的minion已经在master的node列表中了。如果想要更多的node,只需要按照minion的配置,配置更多的机器就可以了。


三、Kubernetes之深入了解Pod


2、Pod基本用法:

  在使用docker时,我们可以使用docker run命令创建并启动一个容器,而在Kubernetes系统中对长时间运行的容器要求是:其主程序需要一直在前台运行。如果我们创建的docker镜像的启动命令是后台执行程序,例如Linux脚本:

  nohup ./startup.sh &

  则kubelet创建包含这个容器的pod后运行完该命令,即认为Pod执行结束,之后根据RC中定义的pod的replicas副本数量生产一个新的pod,而一旦创建出新的pod,将在执行完命令后陷入无限循环的过程中,这就是Kubernetes需要我们创建的docker镜像以一个前台命令作为启动命令的原因。

  对于无法改造为前台执行的应用,也可以使用开源工具supervisor辅助进行前台运行的功能。

****Pod可以由一个或多个容器组合而成

例如:两个容器应用的前端frontend和redis为紧耦合的关系,应该组合成一个整体对外提供服务,则应该将这两个打包为一个pod.

配置文件frontend-localredis-pod.yaml如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apiVersion:v1
kind: Pod
metadata:
   name: redis-php
   label:
     name: redis-php
spec:
   containers:
   - name: frontend
     image: kubeguide /guestbook-php-frontend :localredis
     ports:
     - containersPort: 80
   - name: redis-php
     image:kubeguide /redis-master
     ports:
     - containersPort: 6379

  

  属于一个Pod的多个容器应用之间相互访问只需要通过localhost就可以通信,这一组容器被绑定在一个环境中。

  使用kubectl create创建该Pod后,get Pod信息可以看到如下图:

1
2
3
#kubectl get gods
NAME READY STATUS RESTATS AGE
redis-php 2 /2 Running 0 10m

  可以看到READY信息为2/2,表示Pod中的两个容器都成功运行了.

  查看pod的详细信息,可以看到两个容器的定义和创建过程。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@kubernetes-master ~] # kubectl describe redis-php
the server doesn't have a resource type  "redis-php"
[root@kubernetes-master ~] # kubectl describe pod redis-php
Name: redis-php
Namespace: default
Node: kubernetes-minion /10 .0.0.23
Start Time: Wed, 12 Apr 2017 09:14:58 +0800
Labels: name=redis-php
Status: Running
IP: 10.1.24.2
Controllers: <none>
Containers:
nginx:
Container ID: docker: //d05b743c200dff7cf3b60b7373a45666be2ebb48b7b8b31ce0ece9be4546ce77
Image: nginx
Image ID: docker-pullable: //docker .io /nginx @sha256:e6693c20186f837fc393390135d8a598a96a833917917789d63766cab6c59582
Port: 80 /TCP
State: Running
Started: Wed, 12 Apr 2017 09:19:31 +0800

  


猜你喜欢

转载自blog.51cto.com/wwdhks/2154711