博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从0到1使用Kubernetes系列(四):搭建第一个应用程序
阅读量:6935 次
发布时间:2019-06-27

本文共 5918 字,大约阅读时间需要 19 分钟。

hot3.png

上一篇文章《》中,我们搭建了一套Kubernetes集群,接下来将在本文中介绍如何使用Kubernetes部署一个Nginx并通过Pod IP、Service IP、Ingress这三种方式访问Nginx。

传统Kubernetes应用搭建

创建Namespace

在一个Kubernetes集群中可以创建多个Namespace进行“环境隔离”,当项目和人员众多的时候,可以考虑根据项目的实际情况(例如生产、测试、开发)划分不同的Namespace。

创建一个名称为“nginx”的Namespace:

[root@localhost~]# kubectl create ns nginxnamespace "nginx" created

查看集群中已创建出来的Namespace:

[root@localhost~]# kubectl get nsNAME          STATUS   AGEdefault       Active   35dkube-public   Active   35dkube-system   Active   35dnginx         Active   19s

创建Deployment

Deployment为Pod 和Replica Set(下一代Replication Controller)提供声明式更新。只需要在 Deployment 中描述想要的目标状态是什么,Deployment Controller 就会帮开发者将 Pod 和 ReplicaSet 的实际状态改变成目标状态。开发者可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。使用Deployment能够更加方便地管理Pod,包括扩容、缩容、暂停、滚动更新、回滚等。在Choerodon中用实例的方式来展现Deployment,同时支持在线升级,停止,删除等多元化功能。

典型的应用场景包括:

  • 定义Deployment来创建Pod和ReplicaSet
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续Deployment

编写名为dp.yaml文件,内容如下:

apiVersion: apps/v1beta1kind: Deploymentmetadata:  name: nginx-deployment  namespace: nginx  labels:    app: nginxspec:  replicas: 1  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx:1.13.5-alpine        ports:        - containerPort: 80        readinessProbe:          httpGet:            path: /            port: 80

保存后使用kubectl命令部署:

[root@localhost~]# kubectl apply -f dp.yamldeployment.apps"nginx-deployment"created

可执行下面命令查看部署出来的Deployment:

[root@localhost~]# kubectl get deployment -n nginxME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGEinx-deployment     1         1         1            1           51s

可执行下面命令查看Deployment创建出来的Pod:

[root@localhost~]# kubectl get pod -n nginx -o wideNAME                                 READY    STATUS    RESTARTS   AGE     IP                 NODEnginx-deployment-866d7c64c7-8rnd5    1/1      Running   0          3m      10.233.68.248      clusternode11

Pod状态为Running,说明已经正常工作了就可以在集群中通过Pod IP进行访问了:

[root@localhost~]# curl 10.233.68.248Welcome to nginx!

Welcome to nginx!

If you see this page,the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer tonginx.org.

Commercial support is available atnginx.com.

Thank you for uesing nginx.

更多关于Deployment的介绍请参考这里:

创建Service

Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁生命就永远结束。 通过 Deployment 能够动态地创建和销毁 Pod。 每个 Pod 都会获取它自己的 IP 地址,然而这些IP地址并不是稳定固定的,在销毁Pod时这些IP也会进行回收。 这会导致一个问题:在 Kubernetes 集群中,如果一组 Pod(称为 Backend)为其它Pod (称为 Frontend)提供服务,那么那些 Frontend 该如何发现,并连接到这组 Pod 中的哪些 Backend 呢?

这里要隆重的请出Service来解决这个问题。

编写名为svc.yaml文件,内容如下:

apiVersion: v1kind: Servicemetadata:  namespace: nginx  name: nginx-servicespec:  selector:    app: nginx  ports:  - name: http    protocol: TCP    port: 80    targetPort: 80

使用kubectl命令部署:

[root@localhost~]# kubectl apply -f svc.yamlservice "nginx-service"created

可执行下面命令查看部署出来的Service:

[root@localhost~]# kubectl get svc -n nginxNAME            TYPE          CLUSTER-IP       EXTERNAL-IP      PORT(S)     AGE   nginx-service   ClusterIP    10.233.47.128     
80/TCP 56s

可以看到Pod对应的Service已经建好了,而这个“对应”就是依靠Service里面的Selector与Pod的Labels建立映射的(即Selector内容与Pod的Labels内容需一致)。现在集群内部可以通过该Service访问到Nginx,Choerodon中提供了Service的可视化创建操作,可以更加方便便捷的创建网络:

[root@localhost~]# curl 10.233.47.128Welcome to nginx!

Welcome to nginx!

If you see this page,the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer tonginx.org.

Commercial support is available atnginx.com.

Thank you for uesing nginx.

更多关于Service的介绍请参考这里:

创建Ingress

此时,只有集群内部和所在主机能访问Nginx,要让节点外的其他主机能够访问,还得需要创建Ingress。Ingress 可以给 Service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由等功能。Ingress对应了Choerodon中的域名,Choerodon中除了对域名的管理外还添加了域名证书的管理,支持在线申请和导入。

编写名为ing.yaml文件,内容如下:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: nginx-ingress  namespace: nginxspec:  rules:  - host: nginx.example.local #此域名需解析到k8s集群负载主机IP    http:      paths:      - backend:          serviceName: nginx-service          servicePort: 80        path: /

使用kubectl命令部署:

[root@localhost~]# kubectl apply -f ing.yamlingress.extensions "nginx-ingress" created

可执行下面命令查看部署出来的Ingress:

[root@localhost~]# kubectl get ingress -n nginx NAME             HOSTS                    ADDRESS    PORTS     AGEnginx-ingress    nginx.example.local                 80        1m

此时,就可以在浏览器中使用定义的URL访问Nginx了:

更多关于Ingress的介绍请参考这里:

看完传统Kubernetes的应用搭建后,来看看Choerodon中如何进行应用搭建吧。

基于Choerodon的应用搭建

一键部署

Choerodon中的应用部署简单明了,其构建了一套环境,实例,服务,域名的对象来进行Kubernetes的基础对象映射,为Kubernetes基础对象的创建和修改提供了可视化的操作界面。

在Choerodon猪齿鱼平台部署一个应用只需要在“应用管理”页面点击“创建应用”,并在“开发流水线”创建分支,提交代码后发布应用,在“部署流水线”页面选择要部署的应用,版本,目标环境,部署模式,设置好网络、域名即完成应用的部署。

那Choerodon在应用的搭建的背后又做了哪些事情呢?这就不得不提到GitOps了。

GitOps

Choerodon采用Kubernetes作为基础平台,通过Helm Chart打包应用,将Helm Release抽象成Kubernets自定义对象,这样就能通过Kubernetes资源对象文件描述整个环境部署应用系统的状态。在Choerodon中将应用搭建最终生成的yaml文件以配置库的方式存储在GitLab中,通过对比配置yaml文件的改动来判断应用的搭建状态,实现业务代码与配置代码的分离。

同时用户在平台中创建环境时会同步创建一个与环境对应的Git仓库用来存放部署配置文件,之后所有在环境中部署的相关操作,都会转化为Git库中部署配置文件的操作,同时触发Choerodon部署服务进行状态记录,应用状态记录后触发Choerodon在Kubernetes中的Agent进行应用部署。最终可以根据配置库,Choerodon部署服务状态记录,Choerodon Agent来诠释整个应用部署所经历的流程。

总结

以上步骤可以看出,从构建程序到外部访问,K8S提供了Namespace, Deployment, Service, Ingress等基础对象。以此为基础,Choerodon猪齿鱼平台构建了一套环境,实例,服务,域名的对象来进行映射,包括滚动升级、容错提高、服务测试等,并以友好的UI界面管理进行管理,使用户可以简单的通过页面进行Kubernetes的对象操作,从而创建自己的应用。

Choerodon猪齿鱼平台不仅实现一键部署,平台还提供了完备的测试管理,用于对新发布应用的测试。知识管理模块提供了企业内部的信息分享平台,报表模块则能够提供更为详细的开发、迭代信息。Choerodon猪齿鱼平台提升了K8S持续集成、持续部署的能力,使各个基础平台的耦合性更高,更加适用于企业实践DevOps。

更多关于Kubernetes的文章,点击蓝字可阅读 ▼

关于Choerodon猪齿鱼

是一个开源企业服务平台,是基于Kubernetes的容器编排和管理能力,整合DevOps工具链、微服务和移动应用框架,来帮助企业实现敏捷化的应用交付和自动化的运营管理的开源平台,同时提供IoT、支付、数据、智能洞察、企业应用市场等业务组件,致力帮助企业聚焦于业务,加速数字化转型。

大家可以通过以下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献:

  • 官网:
  • 论坛:
  • Github:
  • 微信:Choerodon猪齿鱼
  • 微博:Choerodon猪齿鱼

欢迎加入Choerodon猪齿鱼社区,共同为企业数字化服务打造一个开放的生态平台。

转载于:https://my.oschina.net/choerodon/blog/2967647

你可能感兴趣的文章
明日草稿
查看>>
Oracle 12c 新特性之 temp undo
查看>>
Python3学习笔记-面向对象
查看>>
带头结点链表逆序实现
查看>>
PHP用法
查看>>
iOS - 毛玻璃动画效果
查看>>
PCB学习
查看>>
【翻译】在Sencha应用程序中使用插件和混入
查看>>
AspNetPager免费开源分页控件7.4.1版发布
查看>>
【引用】Android程序实现完全退出
查看>>
poj3070矩阵快速幂
查看>>
MongoDB学习笔记~Update方法更新集合属性后的怪问题
查看>>
selenium python 一些操作和定位收集
查看>>
在Eclipse中的Android项目里实现代码复用
查看>>
VS2010解决方案转换到VS2008
查看>>
UIColor and components
查看>>
python之multiprocessing创建进程
查看>>
EF相关报错
查看>>
Python内置方法大全
查看>>
linux平台关闭某个进程的脚本
查看>>