摘要:云是由很多小水滴组成的,把每一个计算机想象成小水滴,联合起来就形成了云。一般水滴先出现,然后出现管理水滴的平台(如OpenStack,Kubernetes)。

一、云计算–独立宇宙

1.云是由很多小水滴组成的,把每一个计算机想象成小水滴,联合起来就形成了云;传统的水滴就是VM;Docker的出现,改变了小水滴的粒度

2.水滴独立可运行,内部完整 (如 VM,Docker容器)

3.一般水滴先出现,然后出现管理水滴的平台(如OpenStack,Kubernetes)

二、Kubernetes简介

1.Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制

2.Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让dlcatalog一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让dlcatalog一直提供服务)

3.在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器

三、Kubernetes典型名词

1.Pod

在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod;一个Pod是一个容器环境下的“逻辑主机”,一个Pod是由多个相关的并且共享磁盘的容器组成;在同一个Pod里,容器之间的端口不能重复,否则Pod会起不来,或者起来后无限重启

2. Node

Node是Pod真正运行的主机,可以是物理机,也可以是虚拟机;为了管理Pod,每个Node节点上至少要运行container runtime(比如Docker)、kubelet和kube-proxy服务;Node本质上不是Kubernetes来创建的,Kubernetes只是管理Node上的资源;虽然可以通过manifest创建一个Node对象(如下json所示),但Kubernetes也只是去检查是否真的是有这么一个Node,如果检查失败,也不会往上调度Pod

{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "10.63.90.18",
"labels": {
"name": "my-first-k8s-node"
}
}
}

3. Service

Service是一个抽象的概念,是K8s里面的精华;每个K8s上的App,都可以申请集群内部的“名号”,用来代表自己;K8s就会给你的App分配一个Service许可证,许可证上面带着“假IP”,任何集群内部只要访问这个IP,就等于访问你的App

假设我们拥有一些Pod,每个Pod都开放了9083端口,并且都带有一个标签app=MyApp;如下这段json代码会创建一个新的Service对象,名称为my-dlcatalog-metastore-service,并且会连接目标端口9083;并且带有标签app=MyApp的Pod会被分配一个ip地址,这个ip是给kube-proxy使用的,集群内部只要访问这个ip,就等于访问你的App;需要注意的是,K8s里面的Pod实际ip一般没什么用

kind: Service,
apiVersion: v1,
metadata:
name: my-dlcatalog-metastore-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP,
port: 20403,
targetPort: 9083

4. ConfigMap

ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件;ConfigMap跟secret很类似,但它可以更方便地处理不包含敏感信息的字符串;

使用volume将ConfigMap作为文件或目录直接挂载

如下表示将创建的ConfigMap直接挂载至Pod的/etc/config目录下

apiVersion: v1
kind: Pod
metadata:
name: vol-test-pod
spec:
containers:
- name: test-container
image: 10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530
command: [ "/bin/sh", "bin/start_server.sh" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: special-config
restartPolicy: Never

四、Kubernetes资源花式调度

指定Node节点调度

有三种方式指定 Pod 只运行在指定的 Node 节点上

方式一:

nodeSelector:只调度到匹配指定label的Node上

方式二:

nodeAffinity:功能更丰富的 Node 选择器,比如支持集合操作

nodeAffinity 目前支持两种:requiredDuringSchedulingIgnoredDuringExecution与preferredDuringSchedulingIgnoredDuringExecution,分别代表必须满足条件和优选条件

比如下面的例子代表调度到包含标签 http://kubernetes.io/e2e-az-name 并且值为 e2e-az1 或 e2e-az2 的 Node 上,并且优选还带有标签 another-node-label-key=another-node-label-value 的 Node

apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
- e2e-az2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
containers:
- name: with-node-affinity
image: 10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530

方式三:

podAffinity:调度到满足条件的 Pod 所在的 Node 上

podAffinity 基于 Pod 的标签来选择 Node,仅调度到满足条件 Pod 所在的 Node 上,支持 podAffinity 和 podAntiAffinity

这个功能比较绕,以下面的两个例子作为讲解:

第一个例子表示:

如果一个 “Node 所在 Zone 中包含至少一个带有 security=S1 标签且运行中的 Pod”,那么可以调度到该 Node;不调度到 “包含至少一个带有 security=S2 标签且运行中 Pod” 的 Node 上

apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
topologyKey: failure-domain.beta.kubernetes.io/zone
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S2
topologyKey: kubernetes.io/hostname
containers:
- name: with-node-affinity
image: 10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530

第二个例子表示:

如果一个 “Node 所在 Zone 中包含至少一个带有 appVersion= jwsdlcatalog-x86_64-1.0.1.20200918144530标签且运行中的 Pod”,那么推荐不调度到该 Node;不调度到 “包含至少一个带有app= jwsdlcatalog-x86_64标签且运行中 Pod” 的 Node 上

spec:
restartPolicy: Always #pod重启策略
securityContext:
runAsUser: 2000
fsGroup: 2000
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: appVersion
operator: In
values:
- concat:
- get_input: IMAGE_NAME
- '-'
- get_input: IMAGE_VERSION
#numOfMatchingPods: "2" #一定不要加此字段,此字段是华为自己的实现,社区没有接纳
topologyKey: "failure-domain.beta.kubernetes.io/zone"
weight: 100
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- get_input: IMAGE_NAME
numOfMatchingPods: "1"
topologyKey: "kubernetes.io/hostname"
containers:
- image:
concat:
- get_input: IMAGE_ADDR #拼接镜像的地址(#用拼接函数解决数字型参数问题)
- "/"
- get_input: IMAGE_NAME #拼接镜像的地址(#用拼接函数解决数字型参数问题)
- ":"
- get_input: IMAGE_VERSION #拼接镜像的地址(#用拼接函数解决数字型参数问题)
name: jwsdlcatalog

注:本文纯属个人观点,部分图片如有雷同,纯属意外

点击关注,第一时间了解华为云新鲜技术~

如果云是水滴,Kubernetes就是水滴管理平台的更多相关文章

  1. 基于Python+Django的Kubernetes集群管理平台

    ➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...

  2. 容器、容器集群管理平台与 Kubernetes 技术漫谈

    原文:https://www.kubernetes.org.cn/4786.html 我们为什么使用容器? 我们为什么使用虚拟机(云主机)? 为什么使用物理机? 这一系列的问题并没有一个统一的标准答案 ...

  3. 阿里云上万个 Kubernetes 集群大规模管理实践

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 汤志敏,阿里 ...

  4. 多云混合云之多集群统一管理:基于阿里云ACK统一纳管多个不同Kubernetes集群

    目前阿里云云原生产品家族已经支持多集群管理功能,允许使用阿里云容器服务Kubernetes(简称ACK)控制台或kubectl命令接入.统一纳管其他公有云.客户IDC自建K8s集群,集中管理部署K8s ...

  5. 基于kubernetes自研容器管理平台的技术实践

    一.容器云的背景 伴随着微服务的架构的普及,结合开源的Dubbo和Spring Cloud等微服务框架,宜信内部很多业务线逐渐了从原来的单体架构逐渐转移到微服务架构.应用从有状态到无状态,具体来说将业 ...

  6. 美团点评Kubernetes集群管理实践

    背景 作为国内领先的生活服务平台,美团点评很多业务都具有非常显著.规律的”高峰“和”低谷“特征.尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长.这对集群中心的资源弹性和可用性有非常高的要 ...

  7. [转帖]两大容器管理平台,Kubernetes与OpenShift有什么区别?

    两大容器管理平台,Kubernetes与OpenShift有什么区别? https://www.sohu.com/a/327413642_100159565 原来openshift 就是 k8s的一个 ...

  8. 云原生应用 Kubernetes 监控与弹性实践

    前言 云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider.CRD C ...

  9. 企业级rancher搭建Kubernetes(采用rancher管理平台搭建k8s)

    一.简介 Rancher简介 来源官方:https://www.cnrancher.com/ Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源软件去从 ...

  10. Kubernetes客户端和管理界面大集合

    今天给大家介绍目前市面上常用的kubernetes管理工具,总有一款适合您~~~ 简介 Kubectl K9s Kubernetes-Dashboard Rancher Kuboard Lens Oc ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (119)-- 算法导论10.3 4题

    四.用go语言,我们往往希望双向链表的所有元素在存储器中保持紧凑,例如,在多数组表示中占用前m 个下标位置.(在页式虚拟存储的计算环境下,即为这种情况.)假设除指向链表本身的指针外没有其他指针指向该链 ...

  2. Spring Boot整合OAuth2实现GitHub第三方登录

    Github OAuth 第三方登录示例 1.第三方登录原理 第三方登录的原理是借助OAuth授权来实现,首先用户先向客户端提供第三方网站的数据证明自己的身份获取授权码,然后客户端拿着授权码与授权服务 ...

  3. [Python急救站课程]计算1!+2!+3!+......+10!

    计算1!+2!+3!+......+10!程序 sum, tmp = 0, 1 for i in range(1, 11): tmp *= i sum += tmp print("运算结果是 ...

  4. 基于AStyle的代码格式化脚本 [已开源]

    这是一个简单的windows端脚本 主要用于C/C++代码的格式化 可以添加到鼠标右键,直接在.C/.H文件上右键格式化代码 具体开源地址 https://gitee.com/svchao/code_ ...

  5. GCD Inside: GCD 宏

    1 __OBJC__ __OBJC__宏的定义在 GCD 源码中找不到,它定义在 LLVM 的源码中: // initPreprocessor.cpp static void InitializeSt ...

  6. Java基础知识(纯干货)

    基础篇 IDEA 开发 Java项目 卸载JDK 删除Java的安装目录 删除JAVA_HOME 删除path下关于java的目录 java -version 安装JDK17 下载链接:https:/ ...

  7. swiper轮播图出现疯狂抖动(小程序)

    swiper轮播图息屏一段时间或快速滑动切换时出现疯狂抖动 以前做小程序项目的时候,没专门测试人员,都是开发者自测,可能我的手机性能比较不错(哈哈)或时机不对,总之没发掘到这个bug:近期做项目,测试 ...

  8. Android12版本闹钟服务崩溃问题

    原文地址: Android12版本闹钟服务崩溃问题 - Stars-One的杂货小窝 公司项目app线上出现的崩溃记录问题,崩溃日志如下所示: Caused by java.lang.Security ...

  9. dubbo优化

    dubbo 的优化配置 在spring整合的配置文件中配置1. 超时配置在消费方调用服务方接口服务时,会发生如下超时错误,Dubbo消费方在调用服务时,超时时间默认是1000毫秒,这个时间可能比较短, ...

  10. 数据仓库——Hive

    数据仓库:是一个用于储存,分析,报告的数据系统 数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持 数仓专注分析 数据仓库仓库为何而来,解决什么问题的? 为了分析数据而来,分析结 ...