首先,它是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(Google内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。
Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征:
拥有一个唯一指定的名字
拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号
能够体统某种远程服务能力
被映射到了提供这种服务能力的一组容器应用上
容器编排
轻量级
开源
弹性伸缩
负载均衡
cluster是 计算、存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用。
master是cluster的大脑,他的主要职责是调度,即决定将应用放在那里运行。master运行linux操作系统,可以是物理机或者虚拟机。为了实现高可用,可以运行多个master。
node的职责是运行容器应用。node由master管理,node负责监控并汇报容器的状态,同时根据master的要求管理容器的生命周期。node运行在linux的操作系统上,可以是物理机或者是虚拟机。
pod是k8s的最小工作单元。每个pod包含一个或者多个容器。pod中的容器会作为一个整体被master调度到一个node上运行。
k8s通常不会直接创建pod,而是通过controller来管理pod的。controller中定义了pod的部署特性,比如有几个剧本,在什么样的node上运行等。为了满足不同的业务场景,k8s提供了多种controller,包括deployment、replicaset、daemonset、statefulset、job等。
是最常用的controller。deployment可以管理pod的多个副本,并确保pod按照期望的状态运行。
实现了pod的多副本管理。使用deployment时会自动创建replicaset,也就是说deployment是通过replicaset来管理pod的多个副本的,我们通常不需要直接使用replicaset。
用于每个node最多只运行一个pod副本的场景。正如其名称所示的,daemonset通常用于运行daemon。
能够保证pod的每个副本在整个生命周期中名称是不变的,而其他controller不提供这个功能。当某个pod发生故障需要删除并重新启动时,pod的名称会发生变化,同时statefulset会保证副本按照固定的顺序启动、更新或者删除。
用于运行结束就删除的应用,而其他controller中的pod通常是长期持续运行的。
deployment可以部署多个副本,每个pod 都有自己的IP,外界如何访问这些副本那?
答案是service
k8s的 service定义了外界访问一组特定pod的方式。service有自己的IP和端口,service为pod提供了负载均衡。
k8s运行容器pod与访问容器这两项任务分别由controller和service执行。
可以将一个物理的cluster逻辑上划分成多个虚拟cluster,每个cluster就是一个namespace。不同的namespace里的资源是完全隔离的。
服务分组,小集群,多集群
服务分组,大集群,单集群
Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件:
作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。
为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。
管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。
管理维护Service,提供负载以及服务代理。
管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。
管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。
管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。
管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。
管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。
负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。
负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。
Node上需要运行容器服务
主机名 | IP地址 | 角色 | 配置 |
---|---|---|---|
master | 192.168.0.110 | 主节点 | 2C 2G |
master | 192.168.0.104 | 工作节点 | 2C 2G |
master | 192.168.0.106 | 工作节点 | 2C 2G |
备注:实验环境的虚拟机至少2核2g
链接:https://pan.baidu.com/s/1Qzs8tcf4O-8xlTmnl2Qx5g
提取码:ah4y
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
timedatectl set-timezone Asia/Shanghai
hostnamectl set-hostname master &&bash
hostnamectl set-hostname node01 &&bash
hostnamectl set-hostname node02 &&bash
vim /etc/hosts #主机名解析
末尾添加:
192.168.0.110 master
192.168.0.104 node1
192.168.0.106 node2
其它2台可以添加,也可以拷贝文件:
scp /etc/hosts root@192.168.0.104:/etc/hosts
scp /etc/hosts root@192.168.0.106:/etc/hosts
swapoff -a #临时关闭
sed -i ‘12s/^\//#\//g‘ /etc/fstab #永久关闭
echo -e "net.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/k8s.conf
sysctl --system #使其生效
tar -zxvf docker-ce-18.09.tar.gz
cd docker && yum localinstall *.rpm -y #yum安装相关依赖
systemctl start docker
systemctl enable docker #开机启动
docker version
vim /etc/docker/daemon.json #添加
{
"registry-mirrors": ["https://fskvstob.mirror.aliyuncs.com/"]
}systemctl daemon-reload #重新加载
3台操作相同
cd ../
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm && yum localinstall *.rpm -y #yum解决依赖
cd ../
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz
注意:如果导入镜像发生如下报错:
报错原因:镜像压缩包下载出问题了
解决办法:重新下载或更换镜像
docker images #共9个镜像
只在master上面操作
kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16
kubectl get node
kubectl get pod --all-namespaces
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
echo $KUBECONFIG #应该返回/etc/kubernetes/admin.conf
kubectl create -f kube-flannel.yml
kubectl get node
在node节点服务器操作
systemctl enable kubelet #添加开机启动k8s
kubeadm join 192.168.0.110:6443 --token 2vjmyw.9p6cbn8m8oqs41ta \
--discovery-token-ca-cert-hash sha256:e4c1d3e9da26e2f488dec621122a30d8725762c20bf281519376ed0ae8c7204b
kubectl get node
kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
kubectl -n kube-system get svc
1.参考文章https://www.jianshu.com/p/0e1a3412528e
2.参考老齐的k8s教学视频
3.参考k8s官方中文文档https://kubernetes.io/zh/docs/home/
原文:https://blog.51cto.com/13760351/2488508