原文地址:https://alphahinex.github.io/2020/10/18/deploy-first-app-in-k8s/
description: "萬事開頭難"
date: 2020.10.18 10:26
categories:
- Cloud
- DevOps
- K8s
tags: [Cloud, DevOps, Docker, K8s]
keywords: Kubernetes, K8s, Deploy, Deployment, Service, Kuboard
在 使用 kubeasz 離線安裝 k8s 集群 中,我們完成了 k8s 集群的搭建肛捍,接下來师坎,可以開始在集群中部署第一個(gè)應(yīng)用了加匈。
目標(biāo)
在集群中啟動(dòng)一個(gè)最簡單的 nginx 服務(wù)激率,并能夠通過 http 進(jìn)行訪問嗅辣。
預(yù)熱
回憶 docker 環(huán)境下桐猬,要實(shí)現(xiàn)這個(gè)目標(biāo)撑蚌,需要做的事情很簡單上遥,一行命令即可:
$ docker run --name some-nginx -d -p 8080:80 nginx
之后便可訪問 http://localhost:8080 看到 nginx 的歡迎頁面。
也可以使用 docker-compose 配置文件來實(shí)現(xiàn)此目標(biāo):
some-nginx:
image: nginx
ports:
- "8080:80"
準(zhǔn)備
Kubernetes 官方提供了一個(gè) Kompose 工具争涌,可以方便的將 Docker Compose 的配置文件轉(zhuǎn)換成 k8s 所需的形式粉楚。讓我們來看看官網(wǎng)上的例子:
It’s as simple as 1-2-3
- Use an example docker-compose.yaml file or your own
- Run kompose up
- Check your Kubernetes cluster for your newly deployed containers!
$ wget https://raw.githubusercontent.com/kubernetes/kompose/master/examples/docker-compose-v3.yaml -O docker-compose.yaml
$ kompose up
We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application.
If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead.
INFO Successfully created Service: redis
INFO Successfully created Service: web
INFO Successfully created Deployment: redis
INFO Successfully created Deployment: web
Your application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc,pods,pvc' for details.
$ kubectl get po
NAME READY STATUS RESTARTS AGE
frontend-591253677-5t038 1/1 Running 0 10s
redis-master-2410703502-9hshf 1/1 Running 0 10s
redis-slave-4049176185-hr1lr 1/1 Running 0 10s
什嘛?這就結(jié)束啦亮垫?這也太快了啪模软?
我們還是慢慢來,自己掌握一下節(jié)奏吧饮潦。
看到 kompose up
下面的提示內(nèi)容燃异,我們可以通過 kompose convert
命令將 Docker Compose 的文件轉(zhuǎn)換為 k8s 格式的內(nèi)容:
$ kompose convert -f docker-compose.yml
轉(zhuǎn)換后得到兩個(gè) yaml 文件:some-nginx-deployment.yaml 和 some-nginx-service.yaml 。
部署
kompose 將 docker-compose.yml 轉(zhuǎn)換生成了兩個(gè) yaml 文件继蜡,一個(gè) Deployment 和一個(gè) Service回俐。
Deployment
包含了創(chuàng)建一個(gè)容器所必須的信息,如鏡像稀并、端口仅颇、資源需求、副本數(shù)等碘举。k8s 會(huì)依據(jù) Deployment 中的 template 定義創(chuàng)建必需數(shù)量的容器忘瓦。
Service
用來將 k8s 集群中的服務(wù)暴露出來,供外部進(jìn)行訪問殴俱。類似在 docker 環(huán)境中映射端口至宿主機(jī)的操作。k8s 提供了四種 ServiceTypes 來發(fā)布服務(wù)枚抵,但實(shí)際在非云提供商大部分的 k8s 環(huán)境中线欲,只能選擇 NodePort 類型。指定了 nodePort
端口后汽摹,k8s 集群中每個(gè)節(jié)點(diǎn)都會(huì)將此端口代理至該 Service李丰,不論這個(gè) Serivce 部署在哪個(gè)節(jié)點(diǎn)上。Service 通過 selector
與 Deployment 進(jìn)行關(guān)聯(lián)逼泣。
查看 kompose 生成的文件內(nèi)容趴泌,發(fā)現(xiàn)里面會(huì)包含一些 annotations 信息舟舒,以及并沒有設(shè)定 ServiceType。所以在 kompose 的主頁上有這樣一段描述:
Transformation of the Docker Compose format to Kubernetes resources manifest may not be exact, but it helps tremendously when first deploying an application on Kubernetes.
可以基于 Docker Compose 文件通過轉(zhuǎn)換工具自動(dòng)生成基礎(chǔ)版本嗜憔,再基于基礎(chǔ)版本進(jìn)行調(diào)整秃励,獲得最終使用的版本,可參考如下配置文件 nginx.yml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.17.9
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- name: nginx
port: 80
nodePort: 30080
selector:
app: nginx
將該配置文件應(yīng)用至集群中:
$ kubectl apply -f nginx.yml
之后吉捶,即可通過集群中任意節(jié)點(diǎn)的 ip夺鲜,加配置文件中 nodePort
指定的端口(30080),訪問集群中的 nginx 服務(wù)呐舔。
配置文件參考手冊可見 這里币励。
清理
可對配置文件執(zhí)行 delete 操作清理其中包括的資源,如:
$ kubectl delete -f nginx.yml
可視化界面
使用 k8s 提供的命令行工具珊拼,可完成對集群的各項(xiàng)操作食呻。同時(shí)也可借助可視化界面,更簡便的操作集群澎现,比如: Kuboard 仅胞。
Kuboard 提供了 Docker 鏡像,可使用官方提供的 kuboard.yaml 方便的將其部署到 k8s 集群中昔头,進(jìn)行使用饼问。