本次笔记主要讲述了如何在腾讯云控制台创建并使用你的第一个kubernetes集群,创建过程中每个步骤的区别以及如何选择,保证自己的集群资源达到最优。
TKE CVM容器集群支持以下两种类型:
如果你需要对master的组件和ETCD有一定的订制,可以独立部署在CVM上,如果你仅仅只需要部署服务,则可以把master和Etcd托管
1.业务交付周期短:只需制作好业务镜像,容器基于业务镜像在秒级内启动,且可动态快速设置实例数量,相对物理机和CVM等业务交付和机器数量变更,极大的节省了交付周期。
2.业务半自动化:可通过TKE配置管理功能,快速变更pod下的容器批量配置,实现业务的自动化。(替代了ansible,saltstack部分功能)
3.业务自愈:只需设置好容器实例数,部署在上层的业务容器,即使容器异常退出,业务中止访问,在秒级内又会基于业务镜像启动新的容器实例,保证业务的可持续访问。
4.业务高可用:可通过设置容器实例数量大于或等于2,快速搭建高可用业务。
5.业务快速横向扩展:应对国庆,春节等高峰期访问量,可通过设置容器实例数量,实现业务的快速横向扩展。
6.业务透明管理:相对物理机和CVM,单个应用只会部署在单个容器中,相对在物理机和CVM上的混部方式,业务架构清晰,管理透明化。
7.业务资源成本低:容器器需要分配的 CPU 量 ( 单位:mU (千分之一核) ),最小100,既0.1核;容器需要分配内存的量 ( 单位:MiB ),建议最小为4MiB。若部署单个PHP业务应用,容器建议分配0.1核128M。相对物理机分配8核16G 和 CVM分配4核4G,极大的节省了成本,提高了资源利用率。
8.业务运维成本低:能够极大的降低运维成本,提升服务质量。(例如:相对在物理机和CVM上实现业务高可用,需要部署haproxy等软件,且搭建配置繁琐,在容器设置实例数即可,极大的降低运维成本。)
优势 | 腾讯云容器服务(TKE) | 自建容器服务 |
---|---|---|
简单易用 | 简化集群管理腾讯云容器服务提供超大规模容器集群管理、资源调度、容器编排、代码构建,屏蔽了底层基础构架的差异,简化了分布式应用的管理和运维,您无需再操作集群管理软件或设计容错集群架构,因此也无需参与任何相关的管理或扩展工作。您只需启动容器集群,并指定想要运行的任务即可,腾讯云容器服务帮您完成所有的集群管理工作,让您可以集中精力开发 Docker 化的应用程序。 | 自建容器管理基础设施通常涉及安装、操作、扩展自己的集群管理软件、配置管理系统和监控解决方案,管理复杂。 |
灵活扩展 | 灵活集群托管,集成负载均衡您可以使用腾讯云容器服务灵活安排长期运行的应用程序和批量作业。您还可以使用 API 获得最新的集群状态信息,以便集成您自己的自定义计划程序和第三方计划程序。腾讯云容器服务与负载均衡集成,支持在多个容器之间分配流量。您只需指定容器配置和要使用的负载均衡器,容器服务管理程序将自动添加和删除。另外腾讯云容器服务可以自动恢复运行状况不佳的容器,保证容器数量满足您的需求,以便为应用程序提供支持。 | 需要根据业务流量情况和健康情况人工确定容器服务的部署,可用性和可扩展性差。 |
安全可靠 | 资源高度隔离,服务高可用腾讯云容器服务在您自己的云服务器中启动,不与其他客户共享计算资源。您的集群在私有网络中运行,因此您可以使用您自己的安全组和网络 ACL,这些功能为您提供了高隔离水平,并帮助您使用云服务器构建高度安全可靠的应用程序。容器服务采用分布式服务架构,保证服务的故障自动恢复、快速迁移;结合有状态服务后端的分布式存储,实现服务和数据的安全、高可用。 | 自建容器服务因其内核问题及 Namespace 不够完善,租户、设备、内核模块隔离性都比较差。 |
高效 | 镜像快速部署,业务持续集成腾讯云容器服务运行在您的私有网络中,高品质的 BGP 网络保证镜像极速上传下载,轻松支持海量容器秒级启动,极大程度降低了运行开销,使您的部署更加专注于业务运行。您可以在腾讯云容器服务上部署业务,开发人员在 GitHub 或其他代码平台提交代码后,容器服务可立即进行构建、测试、打包集成,将集成的代码部署到预发布环境和现网环境上。 | 自建容器服务的网络无保证,因此无法保证使用镜像创建容器的效率。 |
低成本 | 容器服务免费腾讯云容器服务没有任何附加费用,您可以在容器中免费调用 API 构建您的集群管理程序。您只需为您创建的用于存储和运行应用程序的云服务资源(例如云服务器、云硬盘等)付费。 | 需要投入资金构建、安装、运维、扩展自己的集群管理基础设施,成本开销大。 |
现在跳转到了私有网络创建界面,由于容器集群网络只支持私有网络,点击现在新建(容器集群网络只支持私有网络),输出私有网络名称(vpc-gz),和子网名称(subnet-vpc-gz),可用区我这里选择的是广州三区,点击创建。
至此,私有网络创建完成。
注意这里集群管理需要选择你新建的vpc的区域,因为创建集群需要用到vpc私有网络,如果该区域没有创建vpc网络,则无法创建集群
在容器服务中,点击集群,点击新建,跳转到创建集群的界面,填写集群信息。
单击【下一步】。
主要参数信息如下:
主要参数信息如下:
单击【下一步】,检查并确认配置信息。
单击【完成】,即可完成创建。
完成后可以在集群管理页面找到你创建的集群查看集群创建的进度
至此,集群已经创建完成
我们通过kubectl的方式访问创建的集群主要分为以下步骤
# curl -LOhttps://storage.googleapis.com/kubernetes-release/release/v1.10.0/bin/linux/amd64/kubectl
# chmod +x ./kubectl
# sudo mv ./kubectl /usr/local/bin/kubectl
已经配置过其他集群执行下面操作
# cd /root/.kube/
# touch new-config1 #将一个集群kubeconfig内容写入new-config1文件中
# touch new-config2 #将另一个集群kubeconfig内容写入new-config2文件中
# KUBECONFIG=new-config1:new-config2 kubectl config view --flatten > $HOME/.kube/config
# kubectl config get-contexts #获取集群信息
# kubectl config use-context cls-hzywbn88-context-default #切换集群
未配置过集群的执行如下操作
# mkdir -p /root/.kube
# touch config #将kubeconfig内容写入config文件中
可以查看自带的pod查看集群信息
集群中提供了以下五种负载
一般我们部署pod的之前都要先创建你所部署的命名空间和从镜像仓库拉取镜像的秘钥。
根据实际需求,设置 Deployment 参数。关键参数信息如下:
Service 定义访问后端 Pod 的访问策略,提供固定的虚拟访问 IP。您可以通过 Service 负载均衡地访问到后端的 Pod。 Service 支持以下类型:
根据实际需求,设置 Service 参数。关键参数信息如下:
点击创建
此时会自动跳转到事件页面,可以看到的pod日志没有报错。
pod状态都为running则表示pod启动正常
从节点管理获取到节点的ip
通过节点ip:30001的访问即可访问到对应的服务
可以查看service中的公网ip
通过公网ip和映射的端口进行访问(我们设置的映射端口为81)
创建ingress来设置域名来访问对应的集群服务
参数设置如下
域名解析,我们只需要在自己购买的域名里面将对应的子域名解析到vip的ip即可
在浏览器输入域名即可访问到对应的服务
配置用来规定一些程序在启动时读入设定,提供了一种修改程序设置的手段, 针对不同的对象可以使用不同的配置。
配置项是多个配置的集合,配置项的值可以是字符串,也可以是文件
我们这里新建一个配置项,只修改nginx的错误日志名称作为示例
配置说明:
修改yaml文件如下
apiVersion: apps/v1beta2
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
description: test nginx
creationTimestamp: "2020-06-02T07:28:45Z"
generation: 1
labels:
k8s-app: nignx-test
qcloud-app: nignx-test
name: nignx-test
namespace: test
resourceVersion: "8580475695"
selfLink: /apis/apps/v1beta2/namespaces/test/deployments/nignx-test
uid: b13877fe-a4a2-11ea-9c35-e28957d7d0b3
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: nignx-test
qcloud-app: nignx-test
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
k8s-app: nignx-test
qcloud-app: nignx-test
spec:
containers:
- image: ccr.ccs.tencentyun.com/tmptest/nwx-nginx
imagePullPolicy: IfNotPresent
name: my-nginx
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 256Mi
volumeMounts:
- mountPath: /etc/nginx/nginx.conf
name: config-volume
subPath: nginx.conf
securityContext:
privileged: false
procMount: Default
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: test-secret
restartPolicy: Always
schedulerName: default-schedule
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 466
name: nginx-conf
name: config-volume
status:
availableReplicas: 1
conditions:
- lastTransitionTime: "2020-06-02T07:28:54Z"
lastUpdateTime: "2020-06-02T07:28:54Z"
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: "2020-06-02T07:28:45Z"
lastUpdateTime: "2020-06-02T07:28:54Z"
message: ReplicaSet "nignx-test-8ddf5b469" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
observedGeneration: 1
readyReplicas: 1
replicas: 1
updatedReplicas: 1
提交修改后会自动滚动更新pod
可以进入容器中看看日志名称是否修改,如果发现日志名称修改,则挂载成功
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。