日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
K8S入門到實(shí)戰(zhàn)--部署應(yīng)用到K8S

K8S 入門到實(shí)戰(zhàn)--部署應(yīng)用到 K8S

作者:crossoverJie 2023-09-06 08:12:04
云計(jì)算
云原生 因?yàn)?k8s 部分功能其實(shí)是偏運(yùn)維的,對(duì)研發(fā)來說優(yōu)先級(jí)并不太高;所以我不太會(huì)涉及一些 k8s 運(yùn)維的知識(shí)點(diǎn),比如安裝、組件等模塊;主要以我們?nèi)粘i_發(fā)會(huì)使用到的組件講起。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供環(huán)縣網(wǎng)站建設(shè)、環(huán)縣做網(wǎng)站、環(huán)縣網(wǎng)站設(shè)計(jì)、環(huán)縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、環(huán)縣企業(yè)網(wǎng)站模板建站服務(wù),10余年環(huán)縣做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

背景

最近這這段時(shí)間更新了一些 k8s 相關(guān)的博客和視頻,也收到了一些反饋;大概分為這幾類:

  • 公司已經(jīng)經(jīng)歷過服務(wù)化改造了,但還未接觸過云原生。
  • 公司部分應(yīng)用進(jìn)行了云原生改造,但大部分工作是由基礎(chǔ)架構(gòu)和運(yùn)維部門推動(dòng)的,自己只是作為開發(fā)并不了解其中的細(xì)節(jié),甚至 k8s 也接觸不到。
  • 還處于比較傳統(tǒng)的以虛擬機(jī)部署的傳統(tǒng)運(yùn)維為主。

其中以第二種占大多數(shù),雖然公司進(jìn)行了云原生改造,但似乎和純業(yè)務(wù)研發(fā)同學(xué)來說沒有太大關(guān)系,自己工作也沒有什么變化。

恰好我之前正好從業(yè)務(wù)研發(fā)的角度轉(zhuǎn)換到了基礎(chǔ)架構(gòu)部門,兩個(gè)角色我都接觸過,也幫助過一些業(yè)務(wù)研發(fā)了解公司的云原生架構(gòu)。

為此所以我想系統(tǒng)性的帶大家以研發(fā)的角度對(duì) k8s 進(jìn)行實(shí)踐。

因?yàn)?k8s 部分功能其實(shí)是偏運(yùn)維的,對(duì)研發(fā)來說優(yōu)先級(jí)并不太高;所以我不太會(huì)涉及一些 k8s 運(yùn)維的知識(shí)點(diǎn),比如安裝、組件等模塊;主要以我們?nèi)粘i_發(fā)會(huì)使用到的組件講起。

計(jì)劃

入門

  • 部署應(yīng)用到 k8s
  • 跨服務(wù)調(diào)用
  • 集群外部訪問

進(jìn)階

  • 如何使用配置
  • 服務(wù)網(wǎng)格實(shí)戰(zhàn)

運(yùn)維你的應(yīng)用

  • 應(yīng)用探針
  • 滾動(dòng)更新與回滾
  • 優(yōu)雅采集日志
  • 應(yīng)用可觀測性
  • 指標(biāo)可視化

k8s 部署常見中間件

  • helm 一鍵部署
  • 編寫 Operator 自動(dòng)化應(yīng)用生命周期

這里我整理了一下目錄,每個(gè)章節(jié)都有博客+視頻配合觀看,大家可以按照喜好選擇。

因?yàn)檫€涉及到了視頻,所以只能爭取一周兩更,在兩個(gè)月內(nèi)全部更新完畢。

根據(jù)我自己的經(jīng)驗(yàn),以上內(nèi)容都掌握的話對(duì) k8s 的掌握會(huì)更進(jìn)一步。

部署應(yīng)用到 k8s

首先從第一章【部署應(yīng)用到 k8s】開始,我會(huì)用 Go 寫一個(gè)簡單的 Web 應(yīng)用,然后打包為一個(gè) Docker 鏡像,之后部署到 k8s 中,并完成其中的接口調(diào)用。

編寫應(yīng)用

func main() {  
   http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {  
      log.Println("ping")  
      fmt.Fprint(w, "pong")  
   })  
  
   http.ListenAndServe(":8081", nil)  
}

應(yīng)用非常簡單就是提供了一個(gè) ping  接口,然后返回了一個(gè) pong。

Dockerfile

# 第一階段:編譯 Go 程序  
FROM golang:1.19 AS dependencies  
ENV GOPROXY=https://goproxy.cn,direct  
WORKDIR /go/src/app  
COPY go.mod .  
#COPY ../../go.sum .  
RUN --mount=type=ssh go mod download  
  
# 第二階段:構(gòu)建可執(zhí)行文件  
FROM golang:1.19 AS builder  
WORKDIR /go/src/app  
COPY . .  
#COPY --from=dependencies /go/pkg /go/pkg  
RUN go build  
  
# 第三階段:部署  
FROM debian:stable-slim  
RUN apt-get update && apt-get install -y curl  
COPY --from=builder /go/src/app/k8s-combat /go/bin/k8s-combat  
ENV PATH="/go/bin:${PATH}"  
  
# 啟動(dòng) Go 程序  
CMD ["k8s-combat"]

之后編寫了一個(gè) dockerfile 用于構(gòu)建 docker 鏡像。

docker:  
   @echo "Docker Build..."  
   docker build . -t crossoverjie/k8s-combat:v1 && docker image push crossoverjie/k8s-combat:v1

使用 make docker  會(huì)在本地構(gòu)建鏡像并上傳到 dockerhub。

編寫 deployment

下一步便是整個(gè)過程中最重要的環(huán)節(jié)了,也是唯一和 k8s 打交道的地方,那就是編寫 deployment。

在之前的視頻《一分鐘了解 k8s》中講過常見的組件:

其中我們最常見的就是 deployment,通常用于部署無狀態(tài)應(yīng)用;現(xiàn)在還不太需要了解其他的組件,先看看 deployment 如何編寫:

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  labels:  
    app: k8s-combat  
  name: k8s-combat  
spec:  
  replicas: 1  
  selector:  
    matchLabels:  
      app: k8s-combat  
  template:  
    metadata:  
      labels:  
        app: k8s-combat  
    spec:  
      containers:  
        - name: k8s-combat  
          image: crossoverjie/k8s-combat:v1  
          imagePullPolicy: Always  
          resources:  
            limits:  
              cpu: "1"  
              memory: 300Mi  
            requests:  
              cpu: "0.1"  
              memory: 30Mi

開頭兩行的 apiVersion  和 kind 可以暫時(shí)不要關(guān)注,就理解為 deployment 的固定寫法即可。

metadata:顧名思義就是定義元數(shù)據(jù)的地方,告訴 Pod 我們這個(gè) deployment 叫什么名字,這里定義為:k8s-combat

中間的:

metadata:  
  labels:  
    app: k8s-combat

也很容易理解,就是給這個(gè) deployment 打上標(biāo)簽,通常是將這個(gè)標(biāo)簽和其他的組件進(jìn)行關(guān)聯(lián)使用才有意義,不然就只是一個(gè)標(biāo)簽而已。

標(biāo)簽是鍵值對(duì)的格式,key, value 都可以自定義。

而這里的  app: k8s-combat 便是和下面的 spec 下的 selector 選擇器匹配,表明都使用  app: k8s-combat  進(jìn)行關(guān)聯(lián)。

而 template 中所定義的標(biāo)簽也是為了讓選擇器和 template 中的定義的 Pod 進(jìn)行關(guān)聯(lián)。

Pod 是 k8s 中相同功能容器的分組,一個(gè) Pod 可以綁定多個(gè)容器,這里就只有我們應(yīng)用容器一個(gè)了;后續(xù)在講到 istio 和日志采集時(shí)便可以看到其他的容器。

template 中定義的內(nèi)容就很容易理解了,指定了我們的容器拉取地址,以及所占用的資源(cpu/ memory)。

replicas: 1:表示只部署一個(gè)副本,也就是只有一個(gè)節(jié)點(diǎn)的意思。

部署應(yīng)用

之后我們使用命令:

kubectl apply -f deployment/deployment.yaml

生產(chǎn)環(huán)境中往往會(huì)使用云廠商所提供的 k8s 環(huán)境,我們本地可以使用 https://minikube.sigs.k8s.io/docs/start/ minikube 來模擬。

就會(huì)應(yīng)用這個(gè) deployment 同時(shí)將容器部署到 k8s 中,之后使用:

kubectl get pod

在后臺(tái) k8s 會(huì)根據(jù)我們填寫的資源選擇一個(gè)合適的節(jié)點(diǎn),將當(dāng)前這個(gè) Pod 部署過去。

就會(huì)列出我們剛才部署的 Pod:

 kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
k8s-combat-57f794c59b-7k58n         1/1     Running   0          17h

我們使用命令:

kubectl exec -it k8s-combat-57f794c59b-7k58n  bash

就會(huì)進(jìn)入我們的容器,這個(gè)和使用 docker 類似。

之后執(zhí)行 curl 命令便可以訪問我們的接口了:

root@k8s-combat-57f794c59b-7k58n:/# curl http://127.0.0.1:8081/ping
pong
root@k8s-combat-57f794c59b-7k58n:/#

這時(shí)候我們?cè)匍_一個(gè)終端執(zhí)行:

 kubectl logs -f k8s-combat-57f794c59b-7k58n
2023/09/03 09:28:07 ping

便可以打印容器中的日志,當(dāng)然前提是應(yīng)用的日志是寫入到了標(biāo)準(zhǔn)輸出中。

總結(jié)

以上就是這一章節(jié)的主要內(nèi)容,重點(diǎn)就是將我們應(yīng)用程序員打包為 docker 鏡像后上傳到鏡像倉庫,再配置好 deployment 由 k8s 進(jìn)行調(diào)度運(yùn)行。

相關(guān)的源碼和 yaml 資源文件都存在這里:

https://github.com/crossoverJie/k8s-combat。


分享題目:K8S入門到實(shí)戰(zhàn)--部署應(yīng)用到K8S
路徑分享:http://m.5511xx.com/article/coihhhh.html