1.腾讯云容器服务
使用该服务,开发者将无需安装、运维、扩展您的集群管理基础设施,只需进行简单的API调用,便可启动和停止 Docker 应用程序,查询集群的完整状态,以及使用各种云服务。
创建集群--创建工作负载/创建ingress--运行
2. 产品概念
集群:容器运行时所需要的云资源的结合,包含云服务器负载均衡器,控制器等资源
实例(pod):里面存在一个或者多个容器实例,共享存储和网络空间
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的? -阿里云开发者社区
工作负载:如控制器这样的资源对象,主要用于管理pod副本的创建(标签),调度(容忍度,亲和性,nodename,nodeselector)
service:多个pod实例以及访问这些实例的规则组成(clasterip,nodeport,loadbalancer,externalname)metallb
ingress:用于将外部http(s)流量通过不同路径或者不同域名或者重定向的方式路由到service的规则的集合
helm:包管理工具,可以对应用程序进行快速安装升级回滚等(.yaml文件主要存放变量,values.yaml里面是我们应用程序所需要的具体参数)
镜像仓库:存放docker镜像,docker镜像用于部署容器服务
3.腾讯云容器服务TKE和自建容器服务对比
TKE:
1.创建集群时,可以选择托管集群或者独立集群,托管集群的master和etcd由腾讯云技术团队集中管理和维护,很方便快捷安全可靠
2.只需要启动集群,创建负载点点点就好了,易于操作,涉及到的指标也多
3.存储运维成本也低,还可以设置告警,控制台也可以查看容器log,易于维护
4.TKE提供弹性伸缩能力,根据业务运行监控容器的cpu,内存,带宽等指标,进行扩缩容服务 [7]
自建容器:人工搭建,成本高,也比较复杂,还没有告警,需要手动排查故障,创建工作负载也需要yaml文件的方式,难度比TKE的图形化界面操作更加复杂
4.持续集成持续交付
持续集成:强调开发人员提交了新代码之后,立即进行构建、(单元)测试。根据测试结果,您可以确定新代码和原有代码能否正确地集成在一起。
持续交付:在持续集成的基础上,将集成后的代码部署到运行环境
5.k8s健康检查方式
通过探针实现
存活探针检查:如对指定端口进行tcp检查,若是失败,将pod对应的ip:port从后端endpoint列表删除
就绪探针检查:如对指定路径的内容进行http get请求,若是失败,杀死容容器,可以根据重启策略做出相应的补救
6.创建容器镜像服务时需要注意什么
1.kube-proxy 使用iptables实现负载均衡,若是需要使用ipvs,需要在集群构建时就开启ipvs
2.创建集群时,需要根据自己的业务场景选择合适的集群模式,独立集群/托管集群
3.设置cpu,内存等资源的request和limit,保证业务的可用性
4.选择合适的访问方式①公网访问(loadbalancer)②仅在集群内部访问(clasterip)③vpc内网访问④主机端口访问(nodeport)
5.创建工作负载时可设置容器的健康检查(就绪探针,存活探针),防止业务异常pod无法感知从而导致pod状态正常但是业务异常的情况
6.设置合适的pod调度策略(noadname,noadselector,亲和性,容忍度)
7.集群的扩容缩容
手动添加/移除节点
弹性伸缩自动添加/移除节点
1.扩容触发条件
①集群中出现因为缺少可用资源而无法调度的容器实例时,将触发已设置的自动扩容策略,并尝试扩容节点来运行这些实例。
②集群自动扩缩容程序会每隔一段时间扫描一次,查看是否有不可调度的 Pod 需进行扩容,并尝试扩容节点来运行这些 Pod。2.缩容触发条件
集群中节点空闲资源较多时,将触发缩容。通常是指,当节点上所有 Pod 的 CPU 或者内存占用资源/可分配资源的比值小于您所设定的百分值时,该节点就会尝试缩容。同时,只有该节点上所有 Pod 都能够成功调度到其他节点上时,Pod 才会被驱逐从而缩容成功。3.pod不会缩容?
①有kube-system下的pod
②有非控制器创建的pod
③pod有本地存储
8.生命周期
1.健康:正常运行并且连接到集群
2.异常:节点运行异常,未连接上集群
3.已封锁:节点已被封锁,不允许新的pod调度到该节点
4.驱逐中:节点正在被驱逐到其他节点
9.k8s对象
工作负载
deployment:调度+更新回滚+检查+无状态服务(nginx:可以通过301,302 等访问到页面,无固定模式就可访问到一个页面)
statefulset:有状态服务(mysql,可以通过固定的名称访问到固定的主机,有序性)
创建的pod拥有持久型的标识符,pod迁移或者销毁重启后,标识符会保留,在需要持久化存储时,可以通过标识符对存储卷进行一一对应,如果不需要持久标识符,建议使用deployment
daemonset:一个主机执行一个pod副本(监控,日志)
job:一次性任务,比如说批量操作等
job执行完后,不会再创建新的pod,也不会删除pod,可以在日志中查看已经完成的pod的日志,若是删除job,job创建的pod也会被删除,同时也无法查看到job创建的pod的日志
cronjob:计划性执行一个任务
服务
service:
四层负载均衡,客户访问时,service负载均衡器会将流量转发到与servie相关的pod集合中的任意pod
ingress:
七层负载均衡和反向代理功能,可以实现http/https业务,可以基于不同url路径或者主机名进行访问控制
配置
configmap:用于保存配置信息,键值对形式
secret:用于保存敏感信息,例如密码,令牌
存储
volume:存储容器访问的相关数据
PV:k8s集群中配置的一块存储,pv独立于pod的生命周期,根据不同的存储类的类型创建不同类型的pv
PVC:集群内的存储请求,例如pv是pod使用的节点中的资源,pvc则生命使用pv资源,当pv资源不足时,pvc也可以动态创建pv
storageclass:存储类,用于描述存储的类型,通过存储类配合pvc可以动态创建需要的存储资源
10.service访问方式
访问模式:clusterip,loadport,loadbalance,enternalname
访问方式:
1.提供公网访问(loadbalance)
2.仅在集群内访问(clusterip,service会自动分配访问的ip,数据库等可以通过此形式访问,以保证服务网络隔离)
3.vpc内网访问:(loadbalance比如微服务内部通信、数据库访问、内网管理界面,或者需要避免公网流量费用和安全性问题 )
需要指出ClusterIP只在集群内部,而VPC内网允许同一VPC下的其他资源访问,比如自建数据库或其他非K8s的服务。
4.主机端口访问:nodeport
11.什么是 VPC 内网访问?
-
类比场景:把 VPC(虚拟私有云)想象成一个公司内部的大楼内网。
-
作用:它会给你的 Kubernetes 服务分配一个内网 IP 地址(比如
10.0.0.123
),这个地址只能在你的 VPC 内部访问,外部互联网无法直接访问。 -
实现方式:通常通过云厂商的内网负载均衡器(如阿里云的 SLB、AWS 的 ALB、腾讯云的 CLB)实现。
12. docker生成镜像的方式
...通过dockerfile自动构建镜像
①尽量精简,不要安装多余软件包
②尽量选择官方镜像作为基础版本,减少基础镜像体积
③尽量把多条RUN命令连接起来,方便理解并且节省空间
④通过 commit -t标记构建镜像,方便新创建的镜像的管理
⑤push前现在本地运行,确保无误
...通过容器操作,并执行commit打包生成的镜像
①运行基础镜像
②安装依赖进行相关操作
③使用commit命令打包镜像
13.如何选择运行时组件
容器运行时是k8s运行的重要组件之一,负责管理镜像和容器的生命周期,kubelet通过container runtime interface (CRI)与容器运行时交互,以管理镜像和容器,腾讯云TKE支持用户选择contained和docker作为运行时组件,container调用链更短,组件更少,更稳定,占用资源更少,建议选择contained