Top

K8S-Install

K8S环境搭建

我的环境是Centos7.4!2台服务器:Master、Node1 –(Kubernetes v1.5.2)

192.168.237.135-server|192.168.237.132-server-2
↓原理
1.Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. 2.自动化容器的部署和复制. 3.随时扩展或收缩容器规模. 4.将容器组织成组,并且提供容器间的负载均衡. 5.很容易地升级应用程序容器的新版本. 6.提供容器弹性,如果容器失效就替换它等. - Kubelect Master:Master节点负责对外提供一系列管理集群的API接口,并且通过和Minion节点交互来实现对集群的操作管理. - Api-server:用户和kubernetes集群交互的入口,封装了核心对象的增删改查操作,提供了RESTFul风格的API接口,通过etcd来实现持久化并维护对象的一致性. - Scheduler:负责集群资源的调度和管理,例如当有pod异常退出需要重新分配机器时,scheduler通过一定的调度算法从而找到最合适的节点. - Controller-manager:主要是用于保证replication Controller定义的复制数量和实际运行的pod数量一致,另外还保证了从service到pod的映射关系总是最新的. - Kubelet:运行在minion节点,负责和节点上的Docker交互,例如启停容器,监控运行状态等. - Proxy:运行在minion节点,负责为pod提供代理功能,会定期从etcd获取service信息,并根据service信息通过修改iptables来实现流量转发(最初的版本是直接通过程序提供转发功能,效率较低.),将流量转发到要访问的pod所在的节点上去. - Etcd:etcd 是一个分布式一致性k-v存储系统数据库,可用于服务注册发现与共享配置储数据库,用来存储kubernetes的信息的,etcd组件作为一个高可用、强一致性的服务发现存储仓库,渐渐为开发人员所关注。在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响应快速的服务集群,etcd的诞生就是为解决该问题. - Flannel:Flannel是CoreOS团队针对Kubernetes设计的一个覆盖网络(Overlay Network)工具,Flannel目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。
↓操作
1.etcd节点配置,设置监听地址并启动. 2.Master-api配置关联etcd节点并开放地址,并关闭帐号认证. 3.Master-config配置关联api地址. 4.Master-启动上面的服务:kube-apiserver、kube-controller-manager、kube-scheduler. 5.Node-config配置关联api地址. 6.Node-kubelet配置关联api地址,设置节点名称. 7.Node-启动:kube-proxy、kubelet、docker. 8.在所有节点上面配置flanneld. 9.Node-导入两个镜像:bestwu/kubernetes-dashboard-amd64:v1.6.3、pod-infrastructure. 10.Master-创建两个文件dashboard-service.yaml、dashboard-controller.yaml. 11.Web报错就在Node节点上开启转发功能.

1. Master

1.1 Master-安装

[root@server ~]# yum install kubernetes-master etcd flannel docker -y

1.2 Master-etcd配置

↓修改etcd的配置文件.
[root@server ~]# vim /etc/etcd/etcd.conf
1
2
3
4
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"												#键值存放的地方.
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.237.135:2379" #监听地址.
ETCD_NAME="default" #节点名称(多节点不可以一样).
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379,http://192.168.237.135:2379" #对外宣告地址.

1.3 Master-api配置

↓↓说明↓↓

api模块

[root@server ~]# vim /etc/kubernetes/apiserver
1
2
3
4
5
6
7
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"								#api开放的地址.
KUBE_API_PORT="--port=8080" #api开放的端口.
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.237.135:2379" #etcd的地址.
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDe
ny,ResourceQuota"
KUBE_API_ARGS=""

1.4 Master-config配置

[root@server ~]# vim /etc/kubernetes/config
1
2
3
4
KUBE_LOGTOSTDERR="--logtostderr=true"	
KUBE_LOG_LEVEL="--v=0" #日志等级.
KUBE_ALLOW_PRIV="--allow-privileged=false" #是否让容器开启特权模式.
KUBE_MASTER="--master=http://192.168.237.135:8080" #关联api地址.

1.5 Master-启动程序

↓重启etcd服务.
[root@server ~]# systemctl restart etcd
↓启动api服务.
[root@server ~]# systemctl start kube-apiserver [root@server ~]# systemctl start kube-controller-manager [root@server ~]# systemctl start kube-scheduler

2. Node

2.1 Node-安装

[root@server-2 ~]# yum install kubernetes-node docker flannel *rhsm* -y

2.2 Node-config配置

[root@server-2 ~]# vim /etc/kubernetes/config
1
KUBE_MASTER="--master=http://192.168.237.135:8080"		#关联api地址.

2.3 Node-kubelet配置

[root@server-2 ~]# vim /etc/kubernetes/kubelet
1
2
3
4
5
6
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=192.168.237.132" #节点名称.
KUBELET_API_SERVER="--api-servers=http://192.168.237.135:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

2.4 Node-启动程序

[root@server-2 ~]# systemctl start kube-proxy
[root@server-2 ~]# systemctl start kubelet
[root@server-2 ~]# systemctl start docker

3. 配置网络

↓节点配置flanneld网络.
[root@server ~]# vim /etc/sysconfig/flanneld
1
2
FLANNEL_ETCD_ENDPOINTS="http://192.168.237.135:2379"			#关联ETCD.
FLANNEL_ETCD_PREFIX="/atomic.io/network"
[root@server-2 ~]# vim /etc/sysconfig/flanneld
1
2
FLANNEL_ETCD_ENDPOINTS="http://192.168.237.135:2379"			#关联ETCD.
FLANNEL_ETCD_PREFIX="/atomic.io/network"
↓Master添加一个etcd网络.
[root@server ~]# etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}' {"Network":"172.17.0.0/16"}
↓启动flanneld网络.
[root@server ~]# systemctl start flanneld [root@server-2 ~]# systemctl start flanneld
↓重启docker(这时候docker的网络就变成flanneld网段了).
[root@server-2 ~]# systemctl restart docker

4.测试节点并配置Web

4.1 查询节点是否可用

[root@server ~]# kubectl get nodes
NAME              STATUS    AGE
192.168.237.131   Ready     7m
192.168.237.132   Ready     20h

4.2 上传镜像和启动文件并编辑

↓下载导入镜像(Node节点需开启转发).
[root@server-2 ~]# cd /data/images/ [root@server-2 images]# ls pod-infrastructure.tgz [root@server-2 images]# docker load -i pod-infrastructure.tgz
↓更改镜像名称(和Node节点kubelet中的pod关联).
[root@server-2 images]# docker tag 99965fb98423 registry.access.redhat.com/rhel7/pod-infrastructure [root@server-2 images]# docker pull bestwu/kubernetes-dashboard-amd64:v1.6.3
↓更改镜像名称(和Master节点dashboard-controller中的pod关联).
[root@server-2 images]# docker tag 691a82db1ecd bestwu/kubernetes-dashboard-amd64:v1.6.3
↓在Master节点上面导入两个个启动文件.
[root@server ~]# cd /data/docker/ [root@server docker]# ls dashboard-controller.yaml dashboard-service.yaml [root@server docker]# vim dashboard-controller.yaml
1
2
args:
- --apiserver-host=http://192.168.237.135:8080 #只需要修改api地址.
↓创建两个yaml.
[root@server docker]# kubectl create -f dashboard-service.yaml service "kubernetes-dashboard" created [root@server docker]# kubectl create -f dashboard-controller.yaml deployment "kubernetes-dashboard" created
↓可以查找到Web就启动了.
[root@server docker]# kubectl get pods --namespace kube-system NAME READY STATUS RESTARTS AGE kubernetes-dashboard-2128778602-f0vzf 1/1 Running 0 11s

4.2 访问Web报错并解决

无法显示
↓开启转发.
[root@client ~]# iptables -P FORWARD ACCEPT 无法显示


        
 上一篇

  Centos, TCP