從0到1使用Kubernetes系列(四):搭建第一個應用程序

上一篇文章《從0到1使用Kubernetes系列(三):使用Ansible安裝Kubernetes集群》中,我們搭建了一套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   AGE
default       Active   35d
kube-public   Active   35d
kube-system   Active   35d
nginx         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/v1beta1
kind: Deployment
metadata:name: nginx-deploymentnamespace: nginxlabels:app: nginx
spec:replicas: 1template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.13.5-alpineports:- containerPort: 80readinessProbe: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   AGE
inx-deployment     1         1         1            1           51s
復制代碼

可執行下面命令查看Deployment創建出來的Pod:

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

Pod狀態為Running,說明已經正常工作了就可以在集群中通過Pod IP進行訪問了:

[root@localhost~]# curl 10.233.68.248<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body{width:35em;margin:0 auto;font-family:Tahoma,Verdana,Arial,sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!<h1>
<p>If you see this page,the nginx web server is successfully installed and working. Further configuration is required.</P><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for uesing nginx.</em></p>
</body>
</html>
復制代碼

更多關于Deployment的介紹請參考這里: kubernetes.io/docs/concep…

創建Service

Kubernetes Pod 是有生命周期的,它們可以被創建,也可以被銷毀,然而一旦被銷毀生命就永遠結束。 通過 Deployment 能夠動態地創建和銷毀 Pod。 每個 Pod 都會獲取它自己的 IP 地址,然而這些IP地址并不是穩定固定的,在銷毀Pod時這些IP也會進行回收。 這會導致一個問題:在 Kubernetes 集群中,如果一組 Pod(稱為 Backend)為其它Pod (稱為 Frontend)提供服務,那么那些 Frontend 該如何發現,并連接到這組 Pod 中的哪些 Backend 呢?

這里要隆重的請出Service來解決這個問題。

編寫名為svc.yaml文件,內容如下:

apiVersion: v1
kind: Service
metadata:namespace: nginxname: nginx-service
spec:selector:app: nginxports:- name: httpprotocol: TCPport: 80targetPort: 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     <none>           80/TCP      56s     
復制代碼

可以看到Pod對應的Service已經建好了,而這個“對應”就是依靠Service里面的Selector與Pod的Labels建立映射的(即Selector內容與Pod的Labels內容需一致)。現在集群內部可以通過該Service訪問到Nginx,Choerodon中提供了Service的可視化創建操作,可以更加方便便捷的創建網絡:

[root@localhost~]# curl 10.233.47.128<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body{width:35em;margin:0 auto;font-family:Tahoma,Verdana,Arial,sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!<h1>
<p>If you see this page,the nginx web server is successfully installed and working. Further configuration is required.</P><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for uesing nginx.</em></p>
</body>
</html>
復制代碼

更多關于Service的介紹請參考這里: kubernetes.io/docs/concep…

創建Ingress

此時,只有集群內部和所在主機能訪問Nginx,要讓節點外的其他主機能夠訪問,還得需要創建Ingress。Ingress 可以給 Service 提供集群外部訪問的 URL、負載均衡、SSL 終止、HTTP 路由等功能。Ingress對應了Choerodon中的域名,Choerodon中除了對域名的管理外還添加了域名證書的管理,支持在線申請和導入。

編寫名為ing.yaml文件,內容如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: nginx-ingressnamespace: nginx
spec:rules:- host: nginx.example.local #此域名需解析到k8s集群負載主機IPhttp:paths:- backend:serviceName: nginx-serviceservicePort: 80path: /
復制代碼

使用kubectl命令部署:

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

可執行下面命令查看部署出來的Ingress:

[root@localhost~]# kubectl get ingress -n nginxNAME             HOSTS                    ADDRESS    PORTS     AGE
nginx-ingress    nginx.example.local                 80        1m
復制代碼

此時,就可以在瀏覽器中使用定義的URL訪問Nginx了:

更多關于Ingress的介紹請參考這里: kubernetes.io/docs/concep…

看完傳統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的文章,點擊藍字可閱讀 ▼

  • 從0到1使用Kubernetes系列(一)——Kubernetes入門
  • 從0到1使用Kubernetes系列(二)——安裝工具介紹
  • 從0到1使用Kubernetes系列(三):使用Ansible安裝Kubernetes集群

關于Choerodon豬齒魚

Choerodon豬齒魚是一個開源企業服務平臺,是基于Kubernetes的容器編排和管理能力,整合DevOps工具鏈、微服務和移動應用框架,來幫助企業實現敏捷化的應用交付和自動化的運營管理的開源平臺,同時提供IoT、支付、數據、智能洞察、企業應用市場等業務組件,致力幫助企業聚焦于業務,加速數字化轉型。

大家可以通過以下社區途徑了解豬齒魚的最新動態、產品特性,以及參與社區貢獻:

  • 官網:choerodon.io
  • 論壇:forum.choerodon.io
  • Github:github.com/choerodon/
  • 微信:Choerodon豬齒魚
  • 微博:Choerodon豬齒魚

歡迎加入Choerodon豬齒魚社區,共同為企業數字化服務打造一個開放的生態平臺。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252882.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252882.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252882.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Embeded linux之移植iptables

一、內核環境&#xff1a; linux-3.4.35 -*- Networking support ---> Networking options ---> [*] Network packet filtering framework (Netfilter) ---> IP: Netfilter Configuration ---> <*> IP tables support (required for filtering/masq/NAT)…

Hadoop HIVE

數據倉庫工具。構建在hadoop上的數據倉庫框架&#xff0c;可以把hadoop下的原始結構化數據變成Hive中的表。&#xff08;主要解決ad-hoc query&#xff0c;即時查詢的問題&#xff09; 支持一種與SQL幾乎完全相同的語言HQL。除了不支持更新&#xff0c;索引和事務&#xff0c;幾…

Xcode9學習筆記67 - 打印查看程序沙箱結構中常用的幾個目錄

override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.//首先獲得應用程序目錄的路徑&#xff0c;在該目錄下有三個文件夾&#xff1a;文檔目錄、庫目錄、臨時目錄以及一個程序包。該目錄就是應用程序的…

檢測raid類型和磁盤壞道腳本

#!/bin/sh #腳本功能&#xff1a; #安裝工具MegaCli64 #Host Information&#xff1a;主機名和ip地址 #Raid Information&#xff1a;raid信息和充電狀態 #WARNING Information&#xff1a;MediaErrcount檢測壞塊和哪塊盤 #Disk Information&#xff1a;磁盤信息 #上傳MegaC…

簡單論述市場營銷管理的基本過程

http://www.chinadmd.com/file/uvc3uaosocwevsetrzpaereo_1.html

Javascript-Switch

JavaScript Switch 語句 請使用 switch 語句來選擇要執行的多個代碼塊之一。 語法 switch(n) { case 1:執行代碼塊 1break; case 2:執行代碼塊 2break; default:n 與 case 1 和 case 2 不同時執行的代碼 }工作原理&#xff1a;首先設置表達式 n&#xff08;通常是一個變量&…

《SpringBoot揭秘 快速構建微服務體系》讀后感(三)

SpringApplication&#xff1a;SpringBoot程序啟動的一站式解決方案 深入探索SpringApplication執行流程 因為書上的版本是1.2的&#xff0c;比較老&#xff0c;這里參考http://blog.csdn.net/zxzzxzzxz123/article/details/69941910 public ConfigurableApplicationContext ru…

裝飾器函數

1.裝飾器 ? 裝飾器&#xff1a;在不改變原函數的調用方式和函數&#xff0c;額外的增加功能 簡單裝飾器def timer(func):def inner():print(time.time())func() # 原來的函數return inner ? timer # func1 timer(func1) def func1():print(func1) 函數帶返回值def timer…

6G SDI/12G SDI 基帶信號無壓縮傳輸方案介紹

認知數字像素分辨率&#xff1a; 首先從分辨率(數字像素)角度來講&#xff0c;從標清時代走到高清&#xff0c;從720x576到現在的1920x1080&#xff0c;寬高比從4:3到16:9&#xff0c;這個是我們比較熟悉的&#xff0c;4K實際上是建立在高清基礎之上的&#xff0c;我們稱之為“…

4月18日

u盤丟了&#xff0c;毀滅性的災難 希望明天可以找到它&#xff0c;不然萬字的策劃案就要重寫 這是一個災難 轉載于:https://www.cnblogs.com/dandansang/p/6731174.html

玩轉SSH端口轉發

ssh端口轉發(tunnel) 我們在實施項目部署時經常會遇到一種問題&#xff0c;那就是當我們給一些安全系數高的客戶部署服務時&#xff0c;大多都不會給我們提供公網訪問的權限&#xff0c;但是很多時候為了方便又會允許服務器直接訪問公網&#xff0c;遇到這種情況大多有兩種辦法…

12.4日團隊工作總結

今天團隊的主要任務是注重于畫圖工具的設計&#xff0c;這就意味著我們首要的任務是將畫圖工具設置出來并可以完整運行&#xff0c;接下來才能顧及之前的改圖軟件&#xff0c;但今天在設計的過程中&#xff0c;遇到了兩者無法無縫結合的問題&#xff0c;目前還沒解決。 轉載于:…

WIFI DFS測試介紹

http://www.eefocus.com/summer12200/blog/09-02/166038_b9094.html 1. 概述: 目前在802.11系列標準中&#xff0c;涉及物理層的有4個標準&#xff1a;802.11、802.11b、802.11a、802.11g。根據不同的物理層標準&#xff0c;無線局域網設備通常被歸為不同的類別&#xff0c;如…

git 遠程倉庫版本的回退以及git reset 幾種常用方式記錄

由于 github push 了兩個比較潦草的commit, 自己很不滿意&#xff0c;又不想重新開vpn進行上傳&#xff0c;所以找了一下相關的教程。 最后研究了一下&#xff0c;原理為先在本地還原到你想要的commit,然后強制push 到遠程倉庫&#xff0c;強制將遠程倉庫還原到你想要的commit.…

【PHP】詳解 $_SERVER 函數中QUERY_STRING和REQUEST_URI、SCRIPT_NAME、PHP_SELF區別

實例&#xff1a;1、http://localhost/index.php/Home/Home/index.html $_SERVER[QUERY_STRING] ""; $_SERVER[REQUEST_URI] "/index.php/Home/H1/index.html";$_SERVER[SCRIPT_NAME] "/index.php";$_SERVER[PHP_SELF] "/index.php/H…

微軟發布Azure Cosmos DB產品以及新的物聯網解決方案

微軟于當地時間2018年12月4日召開了一年一度的以云計算和數據為中心的開發者大會&#xff0c;在會上微軟正式發布Azure機器學習服務(Azure Machine Learning service)&#xff0c;這是一個云平臺&#xff0c;允許開發人員構建、訓練和部署AI模型&#xff0c;并對Azure認知服務(…

安裝Windows10,Ubuntu雙系統14.04LTS記錄

兩種方式都可以制作https://jingyan.baidu.com/article/19192ad85aa445e53e5707c2.htmlhttps://www.cnblogs.com/arcsinw/p/5303615.html

物理層、數據鏈路層網絡設備工作原理

物理層網絡設備有中繼器、集線器。 中繼器的功能是將接收到的信號進行再放大然后傳輸出去&#xff0c;作用是將擴展網絡設備信號傳輸的物理范圍&#xff0c;缺點是擴大數據信號的同時也擴大的噪聲&#xff0c;不能夠進行廣播隔離&#xff0c;網絡利用率很低&#xff0c;現在基本…

java中重載和重寫的區別

1:重載是指一個類中定義多個方法名相同但參數列表不同的方法&#xff0c;在編譯時根據方法參數的個數和類型來決定綁定哪個方法&#xff1b; 重寫是指在子類中定義和父類方法簽名完全一樣的方法&#xff0c;在程序運行時根據對象的類型不同而調用不同的方法。&#xff08;注意不…

大華Global Shutter CMOS攝像機剖析

http://www.itavcn.com/news/201709/20170912/63257.shtml