k8s|kubernetes集群搭建

一、概述
1.简介
官方中文文档:https://www.kubernetes.org.cn/docs
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用。
2.Kubernetes组成
Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。
每个节点上都要运行Docker。Docker来负责所有具体的映像下载和容器运行。
Kubernetes主要由以下几个核心组件组成:
etcd保存了整个集群的状态;
apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的Add-ons:
kube-dns负责为整个集群提供DNS服务
Ingress Controller为服务提供外网入口
Heapster提供资源监控
Dashboard提供GUI
Federation提供跨可用区的集群
Fluentd-elasticsearch提供集群日志采集、存储与查询
二、Kubernetes集群搭建
2.1实验环境
系统:centos7.4
server1:192.168.0.26 (k8s-master)
server2:192.168.0.28 (k8s-node1)
server3:192.168.0.29(k8s-node2)
2.2 yum 源配置
[root@k8s-server1 ~]# vim /etc/yum.repos.d/docker.repo
[virt7-docker-common-release]
name=virt7-docker-common-release
baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
gpgcheck=0
或者执行
echo '[virt7-docker-common-release]
name=virt7-docker-common-release
baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
gpgcheck=0
’ > /etc/yum.repos.d/docker.repo
2.3安装配置Kubernetes Master
[root@k8s-server1 ~]# yum -y install etcd kubernetes-master
[root@k8s-server1 ~]# vim /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS=“http://0.0.0.0:2379”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379”
[root@k8s-server1 ~]# vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="–insecure-bind-address=0.0.0.0"
KUBE_API_PORT="–port=8080"
KUBELET_PORT="–kubelet-port=10250"
KUBE_ETCD_SERVERS="–etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="–service-cluster-ip-range=10.10.0.0/16"
KUBE_ADMISSION_CONTROL="–admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_API_ARGS=""
k8s|kubernetes集群搭建
文章图片

2.4启动etcd、kube-apiserver、kube-controller-manager、kube-scheduler等服务,并设置开机启动
[root@server1 ~]# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES; systemctl enable $SERVICES; systemctl status $SERVICES ; done
2.5在etcd中定义flannel网络
[root@k8s-server1 ~]# etcdctl mk /atomic.io/network/config ‘{“Network”:“10.10.0.0/16”}’
1
2.6安装配置Kubernetes Node
使用yum安装flannel和kubernetes-node
yum 源同master
[root@k8s-node1 ~]# yum -y install flannel kubernetes-node
k8s|kubernetes集群搭建
文章图片

为flannel网络指定etcd服务,修改/etc/sysconfig/flanneld文件
[root@k8s-node1 ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS=“http://192.168.0.26:2379”
FLANNEL_ETCD_PREFIX="/atomic.io/network"
k8s|kubernetes集群搭建
文章图片

(或者直接执行命令:)
修改/etc/kubernetes/config文件
[root@k8s-node1 ~]# vim /etc/kubernetes/config
KUBE_LOGTOSTDERR="–logtostderr=true"
KUBE_LOG_LEVEL="–v=0"
KUBE_ALLOW_PRIV="–allow-privileged=false"
KUBE_MASTER="–master=http://192.168.0.26:8080"
k8s|kubernetes集群搭建
文章图片

修改对应node的配置文件/etc/kubernetes/kubelet
[root@k8s-node1 ~]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="–address=0.0.0.0"
KUBELET_PORT="–port=10250"
KUBELET_HOSTNAME="–hostname-override=192.168.0.28" #修改成对应Node的IP
KUBELET_API_SERVER="–api-servers=http://192.168.0.26:8080" #指定Master节点的API Server
KUBELET_POD_INFRA_CONTAINER="–pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
k8s|kubernetes集群搭建
文章图片

在所有Node节点上启动kube-proxy,kubelet,docker,flanneld等服务,并设置开机启动。
[root@k8s-node1 ~]# for SERVICES in kube-proxy kubelet docker flanneld; do systemctl restart $SERVICES; systemctl enable $SERVICES; systemctl status $SERVICES; done
k8s|kubernetes集群搭建
文章图片

2.7验证集群是否安装成功
在master上执行如下命令
[root@k8s-server1 ~]# kubectl get node
NAME STATUS AGE
192.168.0.28 Ready 1m
2.8继续添加第二个节点
[root@k8s-node2 ~]# yum -y install flannel kubernetes-node
[root@k8s-node2 ~]# sed -i ‘s/127.0.0.1:2379/192.168.0.26:2379/g’ /etc/sysconfig/flanneld
[root@k8s-node2 ~]# sed -i ‘s/127.0.0.1:8080/192.168.0.26:8080/g’ /etc/kubernetes/config
[root@k8s-node2 ~]# sed -i ‘s/address=127.0.0.1/address=0.0.0.0/g’ /etc/kubernetes/kubelet
[root@k8s-node2 ~]# sed -i ‘s/override=127.0.0.1/override=192.168.0.29/g’ /etc/kubernetes/kubelet
[root@k8s-node2 ~]# sed -i ‘s/127.0.0.1:8080/192.168.0.26:8080/g’ /etc/kubernetes/kubelet
[root@k8s-node2 ~]# for SERVICES in kube-proxy kubelet docker flanneld; do systemctl restart $SERVICES; systemctl enable $SERVICES; systemctl status $SERVICES; done
【k8s|kubernetes集群搭建】2.9验证集群是否安装成功
[root@k8s-server1 ~]# kubectl get node
NAME STATUS AGE
192.168.0.28 Ready 37m
192.168.0.29 Ready 33s

    推荐阅读