腾讯云容器服务(Tencent Kubernetes Engine,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务彻底兼容原生 kubernetes API ,扩展了腾讯云的云硬盘、负载均衡等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提升了大规模容器集群管理的便捷性,帮助用户下降成本,提升效率。容器服务提供无偿使用,涉及的其余云产品(如CVM)另外单独计费。node
(二)建立TKE集群如今咱们来尝试建立一个K8S集群
1.登陆腾讯云,进入容器服务-》集群-》新建docker
2.输入集群相关信息
2.1集群信息shell
容器网络我选的是192网段的,操做系统选的Centos7.6
2.2选择机型服务器
Master节点选择平台托管(腾讯云会自动建立集群,独立部署应该是要本身部署)
计费模式选择按量付费(按小时付费,不足1小时好像是会按分钟计费)
Work配置-》机型-》标准型-》所有实例类型(测试的话选一个便宜的便可,建议选1核2G)
3.云服务器配置
登陆方式-》自动生成密码(其余的也能够,主要是这个方便)
4.信息确认
确认建立便可,看一下个人最终配置网络
在集群状态中查看进度。能够看到,腾讯云会自动部署相关的组件架构
达到如下状态时,整个集群才算真正可用
集群处于运行状态负载均衡
概述中的工做负载所有为正常状态,以下个人还有一个异常,须要再等一会,这个比较耗时,可能须要十分钟甚至更久才能所有显示正常(实际上我等了半小时仍是有这个异常,可是貌似不影响后续使用。。)运维
建立完集群后,咱们能够在集群中搭建一个Nginx服务
1.点击进入集群-》工做负载-》Deployment-》新建ide
2.配置Deployment
输入工做负载名微服务
实例内容器
输入名称
选择镜像,docker hub镜像,Nginx镜像
选择镜像版本,latest便可
访问设置
端口设置,容器端口和服务端口都选80
网络那里使用默认的公网访问,其他默认便可
3.验证Nginx服务
集群-》服务与路由-》Service
访问该公网ip
为了防止集群故障,咱们还能够配置伸缩组。当master节点或node节点故障时,自动建立一台新VM代替,做为一个新的master节点或node节点
TKE有一个自动伸缩和伸缩组,我还不是搞得很明白。这里简单作一个记录。按照个人理解,伸缩组应该是针对集群里的node节点,而自动伸缩则针对工做负载
集群-》节点管理-》伸缩组-》新建伸缩组
输入名称,选择竞价付费实例类型,在标准型-》所有实例型里选一个便宜的。至于伸缩组配置支持子网那里我不是很懂,我是勾选了集群所在的子网,节点数量范围0~2
设置完成后,点击全局配置右上角的编辑,启用自动伸缩
自动伸缩配置以下,锁绒配置那里50%改成80%
移除咱们用来测试的集群节点,点击移出
腾讯云就会自动建立出新节点代替这个故障节点
PS:实验完毕,记得把伸缩组停用,不然删除掉节点后,又会自动建立出新节点了
(五)持久化存储若是须要实现持久化存储,可根据如下步骤操做:
1.购买一块云硬盘(按量计费方式),建议和K8S集群在同一个区
2.新建一个pv
pv配置以下:
选择新购买的云硬盘
3.更新pod配置
配置以下:
须要注意的是,要先配置好数据卷,实例内容器里才会显示挂载点。自行配置便可,这里只作简单介绍
命名空间:
经过命名空间实现对不一样项目的管理,各命名空间互不干扰,命名空间名词惟一,但不一样命名空间里的资源命名能够同名(只要不是同一个命名空间里便可)
工做负载:
工做负载(也就是控制器)有多种类型:deployment,statefulset,deamonset,job,cronjob
Deployment:工做在ReplicaSet之上,用于管理无状态应用,目前来讲用得比较多的控制器。支持滚动升级和回滚应用以及扩容和缩容,还提供声明式配置。
DaemonSet:用于确保集群中的每个节点只运行特定的pod副本,一般用于实现系统级后台任务。主要用于运行一个守护性的pod
,好比ELK服务
Job:只要完成就当即退出,不须要重启或重建。
Cronjob:周期性任务控制,不须要持续后台运行,
StatefulSet:管理有状态应用。和其余控制器相比,StatefulSet支持固定的身份ID,经过这个ID,集群中的成员能够相互发现而且通讯,而Deployment每次重启都会变动地址
ReplicaSet: 代用户建立指定数量的pod副本数量,确保pod副本数量符合预期状态,而且支持滚动式自动扩容和缩容功能。ReplicationController(RC)和ReplicaSet(RS),
新版本的k8s,Rs取代了Rc,RC与RS没有本质不一样,只是RS支持集合式的selecor,经过标签label
Service:
用于用户端发现pod服务,获取pod地址,感知pod故障。
每一个 Pod 都有本身的 IP 地址。当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址,从而致使客户端没法访问到该服务,service则是用来解决这个问题的。
访问service的请求来源有两种:k8s集群内部的程序(Pod)和 k8s集群外部的程序。
采用微服务架构时,做为服务全部者,除了实现业务逻辑之外,还须要考虑如何把服务发布到k8s集群或者集群外部,使这些服务可以被k8s集群内的应用、其余k8s集群的应用以及外部应用使用。所以k8s提供了灵活的服务发布方式,用户能够经过ServiceType来指定如何来发布服务,类型有如下几种:
ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)。
NodePort:在每一个Node上打开一个端口以供外部访问
LoadBalancer:经过外部的负载均衡器来访问
Ingress:
暴露了service的三种方式ClusterIP、NodePort与LoadBalance,这几种方式都是在service的维度提供的,service的做用体如今两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制,对集群外部,他相似负载均衡器,能够在集群内外部对pod进行访问。可是,单独用service暴露服务的方式,在实际生产环境中不太合适:
ClusterIP的方式只能在集群内部访问。
NodePort方式的话,测试环境使用还行,当有几十上百的服务在集群中运行时,NodePort的端口管理是灾难。
LoadBalance方式受限于云平台,且一般在云平台部署ELB还须要额外的费用。
所幸k8s还提供了一种集群维度暴露服务的方式,也就是ingress。ingress能够简单理解为service的service,他经过独立的ingress对象来制定请求转发的规则,把请求路由到一个或多个service中。这样就把服务与请求规则解耦了,能够从业务维度统一考虑业务的暴露,而不用为每一个service单独考虑。
PV/PVC:
PersistentVolume(pv)和PersistentVolumeClaim(pvc)是k8s提供的两种API资源,用于抽象存储细节。管理员关注于如何经过pv提供存储功能而无需
关注用户如何使用,一样的用户只须要挂载pvc到容器中而不须要关注存储卷采用何种技术实现。pvc和pv的关系与pod和node关系相似,前者消耗后者的资源。pvc能够向pv申请指定大小的存储资源并设置访问模式,这就能够经过Provision -> Claim 的方式,来对存储资源进行控制。
pvc和pv的关系与pod和node关系相似,前者消耗后者的资源。pvc能够向pv申请指定大小的存储资源并设置访问模式,这就能够经过Provision -> Claim 的方式,来对存储资源进行控制。