前情说明: 三台CentOS7系统的虚拟机(1个master+2个node), 三台机器上的防火墙,SELINUX全部关掉 。我的实验坏境可以上网,默认的YUM源就可以用。
1.什么是kuberNETes
Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Kubernetes优势:
- 容器编排
- 轻量级
- 开源
- 弹性伸缩
- 负载均衡
•Kubernetes的核心概念
运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。 2)Replication ControllerReplication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行。
Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的K/V键值对。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。
Node是Kubernetes集群架构中运行Pod的服务节点(或agent)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。
2.先安装 Kubernetes Master
1)使用yum安装etcd和kubernetes-master
# yum -y install etcd kubernetes-master flannel
2)编辑/etc/etcd/etcd.conf文件
ETCD_NAME=defaultETCD_DATA_DIR=”/var/lib/etcd/default.etcd”ETCD_LISTEN_CLIENT_URLS=”″ETCD_ADVERTISE_CLIENT_URLS=”″
3)编辑/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=″KUBE_SERVICE_ADDRESSES=”–service-cluster-ip-range=10.254.0.0/16″KUBE_ADMISSION_CONTROL=”–admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota”//注意:上一句里面的ServerCount一定要去掉,否则pod会没有数据的。
4)在etcd中定义flannel网络
# etcdctl mk /atomic.io/network/config ‘{“Network”:”172.17.0.0/16″}’
5)编辑/etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS=”″FLANNEL_ETCD_PREFIX=”/atomic.io/network”
6)启动etcd、kube-apiserver、kube-controller-manager、kube-scheduler、flanneld等服务,并设置开机启动。
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler flanneld;dosystemctl restart $SERVICES;systemctl enable $SERVICES;systemctl status $SERVICES ;done
3.安装配置Kubernetes Node
1)使用yum安装flannel和kubernetes-node
# yum -y install flannel kubernetes-node

2)为flannel网络指定etcd服务,修改/etc/sysconfig/flanneld文件
FLANNEL_ETCD=”″FLANNEL_ETCD_KEY=”/atomic.io/network”
3)修改/etc/kubernetes/config文件
KUBE_LOGTOSTDERR=”–logtostderr=true”KUBE_LOG_LEVEL=”–v=0″KUBE_ALLOW_PRIV=”–allow-privileged=false”KUBE_MASTER=”–master=″
4)按照如下内容修改对应node的配置文件/etc/kubernetes/kubelet
KUBELET_ADDRESS=”–address=0.0.0.0″KUBELET_PORT=”–port=10250″KUBELET_HOSTNAME=”–hostname-override=192.168.118.140″ #修改成对应Node的IPKUBELET_API_SERVER=”–api-servers=″ #指定Master节点的API ServerKUBELET_POD_INFRA_CONTAINER=”–pod-infra-container-image=registry.access.RedHat.com/rhel7/pod-infrastructure:latest”KUBELET_ARGS=””
KUBELET_ADDRESS=”–address=0.0.0.0″KUBELET_PORT=”–port=10250″KUBELET_HOSTNAME=”–hostname-override=192.168.118.141″KUBELET_API_SERVER=”–api-servers=″KUBELET_POD_INFRA_CONTAINER=”–pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest”KUBELET_ARGS=””
5)在所有Node节点上启动kube-proxy,kubelet,docker,flanneld等服务,并设置开机启动。
# for SERVICES in kube-proxy kubelet docker flanneld;do systemctl restart $SERVICES;systemctl enable $SERVICES;systemctl status $SERVICES; done
4.验证是否成功
[root@master ~]# kubectl get nodeNAME STATUS AGE192.168.118.140 Ready 3d192.168.118.141 Ready 3d
5.常用排错命令
#kubectl describe pod/rc ….. -n=kube-system
Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。 它可以完美运行在现代的操作系统环境(比如CoreOS和Red Hat Atomic),并提供可以被你管控的轻量级的计算节点。 Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。 我们(Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种与计算集群交互的标准方式。 Kubernetes重新实现了Google在构建集群应用时积累的经验。 这些概念包括如下内容:Pods:一种将容器组织在一起的方法;Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);Labels:一种可以找到和查询容器的方法;Services:一个用于实现某一特定功能的容器组;因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。 在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。 打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。 Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。 Mesos是分布式系统内核,它可以将不同的机器整合在一个逻辑计算机上面。 当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。 有很多的现代化可扩展性的数据处理应用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。 在某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简
发表评论