设为首页 收藏本站
查看: 1180|回复: 0

[经验分享] Kubernets 资源类型简介

[复制链接]

尚未签到

发表于 2018-1-5 18:33:15 | 显示全部楼层 |阅读模式
DSC0000.jpg


# Node
  代表 Kubernets 集群运行的宿主物理机或者虚拟服务器, 为容器提供必要的计算资源: 内存 与 CPU 等.

# Pod
  最底层的抽象. 一个 Pod 中可以包含一个或者多个运行的容器, 这些容器运行在同一个 Node 上, 并共享次 Node 的资源. 在同一个 Pod 中的容器, 可以相互通过 localhost 的方式通信, 这样就可以以集群与可扩展方式运行一个应用提供了支持.
  Pod 是 Kubernetes 中的 '不可变层 (immutable layer)' ; Pod 不会升级, 只会关闭,丢弃与被代替. 他们可以被手动停止, 但是, 不推荐这样. 在 Kubernetes 集群中对 Pod 的配置与管理都是通过 "Deployment" 来完成.

# Deployment
  Deployment 是 Kubernetes 集群的管理殷勤, 负责管理集群中繁琐的 Pod 启停工作, 如 : 它负责部署一个集群中一共需要跑多少个 Pod, Pod 运行的内容, 以及根据部署方案或者 Node , 集群发生的问题来决定如何启停 Pod (技术上来讲, Deployment 把上面的一些工作交给了 Replica Set 来做).
  示例 , 一次部署 3 个 nginx_pod :
  

apiVersion: extensions/v1beta1  
kind: Deployment
  
metadata:
  name: nginx-deployment
  
spec:
  replicas: 3
  template:
  metadata:
  labels:
  role: web
  spec:
  containers:
  - name: nginx
  image: nginx:1.7.9
  ports:
  - containerPort: 80
  

# Service : 将容器中运行的服务暴露给外网.
  Service 是一个 Pod 逻辑集合和访问这个集合的策略, 逻辑上代理后端 Pod. 代表 Pod 集合与其他服务进行交互, 进行请求的分发和负载均衡.
  
集合是通过定义 Service 时, 提供的 Label 选择器完成的.
  
kube-proxy 通过 iptables 实现.
  Service 提供了一个从 Deployment 与 Pod 到外部网络以及外部网络到内部容器的一个双工通道.
  

NodePort Service : 提供容器内部访问机制, 但是也能将部分高段的端口(30000-35000)映射给集群外部以访问集群内部的容器.  

  
LoadBalancer Service : 可以通过配置一些规则在你的云环境中实现一个 负载均衡器.
  

  
ClusterIP : 默认类型. 自动分配一个仅 Cluster 内部可以访问的虚拟IP, 这种类型的服务只能在集群内部使用访问. 用户从且只能从 kubernetes node 节点,使用 clusterIp 和 port 就可以访问 service 里的服务了。
  

  
externalName : 同事分配 Cluster IP , 并进一步在集群中所有节点的同一端口上暴露服务, 用户可以通过任意的 <NodeIP>:NodePort 访问服务. 用户可以从任意 kubernetes node 节点 和 非 kubernetes node 节点,只要和 kubernetes node 正常通信的机器,都可以访问service的服务。
  

  示例配置:
  我们在一个rails应用的前端加一个nginx的负载均衡,同时使用redis作为此应用的数据后端,只需要内部访问。我们的负载均衡指向nginx,nginx将请求路由到rails应用程序,同时通过redis读写数据。下面是Service的配置文件,注意其中的selector节点中label值role:web让Kubernetes知道此LoadBalancer类型的Service的具体Deployment在哪 (上节讲Deployment时例子中的3个nginx)。
  

##  
# nginx
  
# Listen to the world on port 80 and 443
  
##
  
apiVersion: v1
  
kind: Service
  
metadata:
  name: nginx
  labels:
  role: web
  
spec:
  type: LoadBalancer
  ports:
  - name: http
  port: 80
  targetPort: 80
  - name: https
  port: 443
  targetPort: 443
  selector:
  # Find all Resources that are tagged with the &quot;role: web&quot; label
  # In our case, it will find the nginx Deployment mentioned above
  role: web
  
---
  
##
  
# Rails
  
# Listen for traffic on 8080 so we don't have to run as root.
  
##
  
apiVersion: v1
  
kind: Service
  
metadata:
  name: rails
  labels:
  role: rails
  
spec:
  type: NodePort
  ports:
  - port: 8080
  targetPort: 8080
  selector:
  role: rails
  
---
  
##
  
# Redis
  
##
  
apiVersion: v1
  
kind: Service
  
metadata:
  name: redis
  labels:
  role: redis
  
spec:
  type: NodePort
  ports:
  - port: 6379
  targetPort: 6379
  selector:
  role: redis
  

# Namespace : 封装/划分基础设施
  在 Service 上面, 还可以定义它的 Namespace 属性, 它实际上只是一个标识符, 用于封装,划分你的基础设施.
  Kubernetes 内部就是用命名空间的方式来区分自己内部的服务(kubedns,kube-proxy等)与用户自定义的服务, Kubernetes 的命名空间是 : kube-system.
  
如果用户未定义命名空间, Kubernetes 会将&quot;资源&quot;放置到一个默认的命名空间中, 在大多数情况下, 这就足够了; 但是, 在多团队合作的情况下, 使用命名空间可以防止资源的冲突与混淆.
  示例:
  

apiVersion: v1  
kind: Namespace
  
metadata:
  name: my-app
  

# Labels : 用与标记与查找资源.
  Kubernetes中大量使用Label在整个集群中来标记与查找资源。
  Deployment 中有 labels 节点, 他的值跟下面的 Service 中 selectors 中的值是对应的. Kubernetes 用 Label 将各种资源重定义的配置关联在一起, 引用层级:
  

Service --> Deployment --> Pod --> Container  

# secrets : 在 Pod 与容器中保存敏感信息

# DaemonSet : 定义在部分或者所有 Nodes 中都冗余的运行一个 Pod

# Job : 创建一次性任务.

# kubernetes 支持的卷插件(v1.6)
DSC0001.png

  
红色的为 v1.6 新增.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431990-1-1.html 上篇帖子: MOSOS基础介绍(转自树人云) 下篇帖子: [k8s]通过openssl生成证书
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表