首先,它是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(Google内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提升了大规模容器集群管理的便捷性。
Kubernetes是一个完备的分布式系统支撑平台,具备完备的集群管理能力,多扩多层次的安全防御和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。node
Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有以下关键特征:linux
拥有一个惟一指定的名字
拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号
可以体统某种远程服务能力
被映射到了提供这种服务能力的一组容器应用上docker
容器编排
轻量级
开源
弹性伸缩
负载均衡json
cluster是 计算、存储和网络资源的集合,k8s利用这些资源运行各类基于容器的应用。vim
master是cluster的大脑,他的主要职责是调度,即决定将应用放在那里运行。master运行linux操做系统,能够是物理机或者虚拟机。为了实现高可用,能够运行多个master。后端
node的职责是运行容器应用。node由master管理,node负责监控并汇报容器的状态,同时根据master的要求管理容器的生命周期。node运行在linux的操做系统上,能够是物理机或者是虚拟机。安全
pod是k8s的最小工做单元。每一个pod包含一个或者多个容器。pod中的容器会做为一个总体被master调度到一个node上运行。bash
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 | CentOS 7.6 |
node01 | 192.168.0.104 | 工做节点 | 2C 2G | CentOS 7.6 |
node02 | 192.168.0.106 | 工做节点 | 2C 2G | CentOS 7.6 |
备注:实验环境的虚拟机至少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
ssh-keygen #生成公钥
ssh-copy-id -i .ssh/id_rsa.pub root@node1
ssh-copy-id -i .ssh/id_rsa.pub root@node2
ssh-copy-id -i .ssh/id_rsa.pub root@master
ssh root@node1 #测试链接
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
若出现这种报错:
解决方法:
echo "1" >> /proc/sys/net/ipv4/ip_forward
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
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 #不要复制这个,要拷贝系统生成的token才行!
注意:若出现和master系统报错,相同办法解决便可!
echo "1" >> /proc/sys/net/ipv4/ip_forward
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
访问地址 :http://ip:32000
1.参考文章https://www.jianshu.com/p/0e1a3412528e2.参考老齐的k8s教学视频3.参考k8s官方中文文档https://kubernetes.io/zh/docs/home/