本篇文章来自《华为云云原生王者之路训练营》黄金系列课程第3课,由华为云容器批量计算首席架构师马达主讲,介绍云原生技术体系中Kubernetes的相关概念和技术架构。
“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。这种特性经常被称为像水电一样使用IT基础设施。
该图为Kubernetes社区描绘的整个Kubernetes生态里所涉及的几个主要层次:
上图从上往下依次为:
1)生态层:不属于K8S范围
2)接口层(工具、SDK库、UI等):
3)治理层:策略执行和自动化编排
4)应用层:部署(无状态/有状态应用、批处理、集群应用等)和路由(服务发现、DNS解析等)
5)内核层:Kubernetes最核心功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
总的来说:
内核层:提供最核心的特性最小集以及API,为必选模块
内核层之上:以各种Controller插件方式实现内核层API,支持可替换的实现
内核层之下:是各种适配存储、网络、容器、Cloud Provider等
POD实例:
{"kind": "Pod","apiVersion": "v1","metadata": {"name": "redis-django","labels": {"app": "webapp"}},"spec": {"containers": [{"name": "key-value-store","image": "redis"},{"name": "frontend","image": "django"}]}}
1)Infrastructure Container:基础容器
2)InitContainers:初始化容器,一般用于服务等待处理以及注册Pod信息等
3)Containers:业务容器
apiVersion: v1kind: Podmetadata:name: myapp-podlabels:app: myappspec:containers:- name: myapp-containerimage: busyboxcommand: ['sh', '-c', 'echo The app is running! && sleep 3600']initContainers:- name: init-myserviceimage: busyboxcommand: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']- name: init-mydbimage: busyboxcommand: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
1)镜像部分:
2)启动命令:
3)计算资源:
spec:
imagePullSecrets:
- name: default-secret
containers:
- image: kube-dns:1.0.0
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- /kube-dns 1>>/var/log/skydns.log 2>&1 --domain=cluster.local. --dns-port=10053
--config-dir=/kube-dns-config --v=2
resources:
limits:
cpu: 100m
memory: 512Mi
requests:
cpu: 100m
memory: 100Mi
Pod可以接收的外部输入方式:环境变量、配置文件以及密钥。
环境变量:使用简单,但一旦变更后必须重启容器。
以卷形式挂载到容器内使用,权限可控。
spec:
containers:- env:- name: APP_NAMEvalue: test- name: USER_NAMEvalueFrom:secretKeyRef:key: usernamename: secretenvFrom:- configMapRef:name: configvolumeMounts:- mountPath: /usr/local/configname: cfg- mountPath: /usr/local/secretname: sctvolumes:- configMap:defaultMode: 420items:- key: agepath: agename: configname: cfg- name: sctsecret:defaultMode: 420secretName: secret
apiVersion: extensions/v1beta1kind: ReplicaSetmetadata:name: frontendspec:replicas: 3selector:matchLabels:tier: frontendmatchExpressions:- {key: tier, operator: In, values: [frontend]}template:metadata:labels:app: guestbooktier: frontendspec:containers:- name: php-redisimage: gcr.io/google_samples/gb-frontend:v3resources:requests:cpu: 100mmemory: 100Mienv:- name: GET_HOSTS_FROMvalue: dnsports:- containerPort: 80
1)Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的Replication Controller)的方法,您可以在Deployment对象中只描述您所期望的理想状态(预期的运行状态),Deployment控制器为您将现在的实际状态转换成您期望的状态;
2)Deployment集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务,回滚到以前某一版本(成功/稳定)的Deployment等功能,在某种程度上,Deployment可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。
3)Deployment的典型用例:
apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: nginx-deploymentspec:replicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80
Weather Forecast是一款查询城市的天气信息的应用示例,一共包含4个微服务:frontend、advertisement、forecast和recommendation
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。