资讯专栏INFORMATION COLUMN

京东云Kubernetes集群最佳实践

XGBCCC / 2646人阅读

摘要:京东云集群最佳实践容器是的基石,它们之间的关系不言而喻。因此我们今天的文章将会和大家分享关于京东云集群的部分最佳实践。京东云集群采用管理节点全托管的方式,为用户提供简单易用高可靠功能强大的容器管理服务。

京东云Kubernetes集群最佳实践

容器是Cloud Native的基石,它们之间的关系不言而喻。了解容器对于学习Cloud Native也是十分重要的。近期,京东云Cloud Native的“在线公开课”从理论和实践两个层面为大家分享了Cloud Native相关的技术知识。在本周的周日,我们还将迎来”Cloud Native时代的应用之路与开源创新“专场技术沙龙。

因此我们今天的文章将会和大家分享关于京东云Kubernetes集群的部分最佳实践。感兴趣的小伙伴也可以跟着文档自己动手进行创建。

京东云Kubernetes集群采用管理节点全托管的方式,为用户提供简单易用、高可靠、功能强大的容器管理服务。该产品完全兼容标准Kubernetes API ,集成京东云网络、存储等插件。Kubernetes集群服务简化了Kubernetes部署、管理,降低了Kubernetes使用门槛,增强应用的可靠性,提升开发的效率,同时,也能更好地帮助用户减少资源投入的成本。

最佳实践——部署应用


部署持久化存储

京东云Kubernetes集群服务集成了京东云云硬盘,您可以在集群中使用京东云云硬盘作为持久化存储;

使用京东云云盘定义静态存储

1. 创建PV

</>复制代码

  1. kind: PersistentVolume
  2. apiVersion: v1
  3. metadata:
  4. name: pv-static
  5. labels:
  6. type: jdcloud-ebs
  7. spec:
  8. capacity:
  9. storage: 30Gi
  10. accessModes:
  11. - ReadWriteOnce
  12. persistentVolumeReclaimPolicy: Retain
  13. jdcloudElasticBlockStore:
  14. volumeID: vol-ogcbkdjg7x
  15. fsType: xfs

参数说明:

1、如您需要在京东云Kubernetes集群服务中使用京东云云硬盘作为持久化存储,请在PersistentVolume定义时,指定插件jdcloudElasticBlockStore;

2、VolumeID:指定同地域下为Kubernetes集群服务提供持久化存储的云硬盘ID;

3、Fstype:指定文件系统类型;目前仅支持ext4和xfs两种;

4、Capacity:PV 将具有特定的存储容量。这是使用 PV 的容量属性设置的;

5、PersistentVolume 可以以资源提供者支持的任何方式挂载到主机上。

京东云云硬盘目前只支持一种模式ReadWriteOnce——该卷可以被单个节点以读/写模式挂载;

访问模式包括:
ReadWriteOnce——该卷可以被单个节点以读/写模式挂载

在命令行中,访问模式缩写为:
RWO - ReadWriteOnce
京东云为PersistentVolume提供了插件,插件类型为:jdcloudElasticBlockStore

注:

由于云硬盘限制一个云硬盘只能同时挂载一个云主机,在使用基于PVC的Pod时,建议使用replicas=1来创建一个部署集。StatefulSet可解决多副本问题。

Pod迁移,PVC迁移(卸载旧实例/挂载新实例)默认35秒。

通过Deployment部署,删除Deployment之后,可重新挂载原有PVC到新的Pod里面。

2. 创建PVC

声明可以指定一个标签选择器来进一步过滤该组卷。只有标签与选择器匹配的卷可以绑定到声明。选择器由两个字段组成:

所有来自 MatchLabels 和 MatchExpressions 的要求都被“与”在一起——它们必须全部满足才能匹配。

本例使用MatchLabels作为过滤条件,将匹配的PersistentVolume绑定到Persistent Volume Claim。

MatchLabels:Volume 必须有具有该值的标签

matchExpressions:这是一个要求列表,通过指定关键字,值列表以及与关键字和值相关的运算符组成。有效的运算符包括 In、NotIn、Exists 和 DoesNotExist。

访问模式包括:ReadWriteOnce——该卷可以被单个节点以读/写模式挂载。

在命令行中,访问模式缩写为:RWO - ReadWriteOnce

京东云为Persistent Volume提供了插件,插件类型为:jdcloudElasticBlockStore

注:副本数只能指定1。

</>复制代码

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: pv-static-pvc
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce
  8. storageClassName: ""
  9. resources:
  10. requests:
  11. storage: 30Gi
  12. selector:
  13. matchLabels:
  14. type: jdcloud-ebs

创建Pod

kind: Pod

</>复制代码

  1. apiVersion: v1
  2. metadata:
  3. name: pod-static
  4. spec:
  5. volumes:
  6. - name: pv-static
  7. persistentVolumeClaim:
  8. claimName: pv-static-pvc

</>复制代码

  1. containers:
  2. - name: busybox-static
  3. image: busybox
  4. command:
  5. - sleep
  6. - "600"
  7. imagePullPolicy: Always
  8. volumeMounts:
  9. - mountPath: "/usr/share/mybusybox/"
  10. name: pv-static

使用京东云云盘定义动态存储

当集群中的静态 PV 都不匹配新建的 Persistent Volume Claim 时,集群可能会尝试动态地为 PVC 创建卷。

关于京东云云硬盘规格:

创建PVC

</>复制代码

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: pvc1
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce
  8. storageClassName: jdcloud-ssd
  9. resources:
  10. requests:
  11. storage: 20Gi

查看集群的PVC

kubectl get pvc

输出

</>复制代码

  1. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  2. pvc1 Bound pvc-73d8538b-ebd6-11e8-a857-fa163eeab14b 20Gi RWO jdcloud-ssd 18s

查看集群的PV

</>复制代码

  1. kubectl get pv

输出

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-73d8538b-ebd6-11e8-a857-fa163eeab14b 20Gi RWO Delete Bound default/pvc1 jdcloud-ssd 2m

基于Storage Class jdcloud-ssd,为PVC创建了卷。一旦 PV 和 PVC 绑定后,Persistent Volume Claim 绑定是排他性的,不管它们是如何绑定的。 PVC 跟 PV 绑定是一对一的映射。

2 部署Service

Kubernetes Service

Kubernetes Service定义了这样一种抽象:一个 Pod 的逻辑分组,一种可以访问它们的策略-通常称为微服务。这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector(查看下面了解,为什么可能需要没有 Selector 的 Service)实现的。一个 Service 在 Kubernetes 中是一个REST对象,和Pod类似.像所有的 REST 对象一样, Service 定义可以基于 POST 方式,请求 API Server 创建新的实例。

京东云Kubernetes集成负载均衡服务,支持创建Load Balance类型的Service,为应用提供安全、可靠的网络。

创建的负载均衡会占用本地域的负载均衡配额,需要保证有足够配额。

1、创建支持Load Balance类型的Service,命名为myservice.yaml文件定义如下:

</>复制代码

  1. kind: Service
  2. apiVersion: v1
  3. metadata:
  4. name: servicetest
  5. labels:
  6. run: myapp
  7. spec:
  8. ports:
  9. - protocol: TCP
  10. port: 80
  11. targetPort: 80
  12. nodePort: 30062
  13. type: LoadBalancer
  14. selector:
  15. run: myapp

2、执行Kubectl创建命令,创建一个Service;其中使用相应的YAML文件名称替换:

</>复制代码

  1. kubectl create -f myservice.yaml

3、创建一组Nginx Pod,mynginx.yaml文件定义如下:

</>复制代码

  1. apiVersion: apps/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: my-nginx
  5. spec:
  6. selector:
  7. matchLabels:
  8. run: myapp
  9. replicas: 2
  10. template:
  11. metadata:
  12. labels:
  13. run: myapp
  14. spec:
  15. containers:
  16. - name: my-nginx
  17. image: nginx
  18. ports:
  19. - containerPort: 80

4、执行Kubectl创建命令,创建一个Deployment;其中使用相应的YAML文件名称替换

</>复制代码

  1. kubectl create -f mynginx.yaml

5、查看已创建成功的Deployment,执行以下命令:

</>复制代码

  1. kubectl get pods -l run=myapp -o wide

返回结果如下:

</>复制代码

  1. NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  2. my-nginx 2 2 2 2 4m

6、查看相应的Pod运行状态,

</>复制代码

  1. kubectl get pods -l run=myapp -o wide

返回结果如下:

</>复制代码

  1. NAME READY STATUS RESTARTS AGE IP NODE
  2. my-nginx-864b5bfdc7-6297s 1/1 Running 0 23m 172.16.0.10 k8s-node-vmtwjb-0vy9nuo0ym
  3. my-nginx-864b5bfdc7-lr7gq 1/1 Running 0 23m 172.16.0.42 k8s-node-vm25q1-0vy9nuo0ym

7、查看Service详情:

kubectl describe service servicetest
可以查看绑定到Service的Endpoints:

</>复制代码

  1. Name: servicetest
  2. Namespace: default
  3. Labels: run=myapp
  4. Annotations:
  5. Selector: run=myapp
  6. Type: LoadBalancer
  7. IP: 172.16.61.58
  8. LoadBalancer Ingress: 114.67.227.25
  9. Port: 80/TCP
  10. TargetPort: 80/TCP
  11. NodePort: 30062/TCP
  12. Endpoints: 172.16.0.10:80,172.16.0.42:80
  13. Session Affinity: None
  14. External Traffic Policy: Cluster
  15. Events:
  16. Type Reason Age From Message
  17. ---- ------ ---- ---- -------
  18. Normal EnsuringLoadBalancer 11m (x9 over 26m) service-controller Ensuring load balancer
  19. Normal EnsuredLoadBalancer 10m service-controller Ensured load balancer

注:Load Balancer Ingress:114.67.227.25为外部公网IP

8、执行如下命令查询绑定到service的enpoints列表:

</>复制代码

  1. kubectl get ep servicetest
  2. 返回
  3. NAME ENDPOINTS AGE
  4. servicetest 172.16.0.10:80,172.16.0.42:80 28m

9、在浏览器中输入与Service关联的Load Balance公网IP及端口,看到如下页面,即表明Nginx服务正常。

·END·

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25484.html

相关文章

  • 京东Kubernetes集群最佳实践

    摘要:京东云集群最佳实践容器是的基石,它们之间的关系不言而喻。因此我们今天的文章将会和大家分享关于京东云集群的部分最佳实践。京东云集群采用管理节点全托管的方式,为用户提供简单易用高可靠功能强大的容器管理服务。 京东云Kubernetes集群最佳实践 容器是Cloud Native的基石,它们之间的关系不言而喻。了解容器对于学习Cloud Native也是十分重要的。近期,京东云Cloud N...

    刘永祥 评论0 收藏0
  • CloudBest:年度复盘丨盘点2020无处不在的「原生」

    摘要:华为云华为云在云原生这场游戏中,最具竞争力的玩家之一。年,金山云在云原生领域推出了三款重磅产品星曜裸金属服务器云服务器和云盘。在线上智博会上,浪潮云发布了经过全新迭代升级的浪潮云,进一步提升平台云原生服务能力。面对数字时代复杂系统的不确定性,传统的 IT 应用架构研发交付周期长、维护成本高、创新升级难,烟囱式架构,开放性差、组件复用度低,这些都成为了企业业务快速增长的瓶颈。而云原生以其敏捷、...

    Tecode 评论0 收藏0
  • 这大概是今年介绍原生最清晰明了的文章!

    摘要:在本次上,京东云将在大会上为对云原生感兴趣的研发和运维人员带来利用延迟加载快速启动容器的话题分享。今天聊的主角云原生也是一样。 showImg(https://segmentfault.com/img/bVbtNqp?w=688&h=113); showImg(https://segmentfault.com/img/bVbtQaR?w=684&h=327); showImg(http...

    andycall 评论0 收藏0
  • 这大概是今年介绍原生最清晰明了的文章!

    摘要:在本次上,京东云将在大会上为对云原生感兴趣的研发和运维人员带来利用延迟加载快速启动容器的话题分享。今天聊的主角云原生也是一样。 showImg(https://segmentfault.com/img/bVbtNqp?w=688&h=113); showImg(https://segmentfault.com/img/bVbtQaR?w=684&h=327); showImg(http...

    StonePanda 评论0 收藏0
  • 数人|当K8S遇上微服务-京东金融PaaS平台思考与实践

    摘要:平台上的微服务架构应用再来看一下我眼中的基于当前最流行的微服务架构的设计是什么样的,即我们平台上要运行的典型应用是什么样的。 showImg(https://segmentfault.com/img/remote/1460000010900878); 8月19日的数人云Container Meetup上,张龙老师做了《基于Kubernetes的PaaS平台的设计和思考》的精彩分享,分别...

    Imfan 评论0 收藏0

发表评论

0条评论

XGBCCC

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<