成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

K8S 入門到實戰--部署應用到 K8S

云計算 云原生
因為 k8s 部分功能其實是偏運維的,對研發來說優先級并不太高;所以我不太會涉及一些 k8s 運維的知識點,比如安裝、組件等模塊;主要以我們日常開發會使用到的組件講起。

背景

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

  • 公司已經經歷過服務化改造了,但還未接觸過云原生。
  • 公司部分應用進行了云原生改造,但大部分工作是由基礎架構和運維部門推動的,自己只是作為開發并不了解其中的細節,甚至 k8s 也接觸不到。
  • 還處于比較傳統的以虛擬機部署的傳統運維為主。

其中以第二種占大多數,雖然公司進行了云原生改造,但似乎和純業務研發同學來說沒有太大關系,自己工作也沒有什么變化。

恰好我之前正好從業務研發的角度轉換到了基礎架構部門,兩個角色我都接觸過,也幫助過一些業務研發了解公司的云原生架構。

為此所以我想系統性的帶大家以研發的角度對 k8s 進行實踐。

因為 k8s 部分功能其實是偏運維的,對研發來說優先級并不太高;所以我不太會涉及一些 k8s 運維的知識點,比如安裝、組件等模塊;主要以我們日常開發會使用到的組件講起。

計劃

入門

  • 部署應用到 k8s
  • 跨服務調用
  • 集群外部訪問

進階

  • 如何使用配置
  • 服務網格實戰

運維你的應用

  • 應用探針
  • 滾動更新與回滾
  • 優雅采集日志
  • 應用可觀測性
  • 指標可視化

k8s 部署常見中間件

  • helm 一鍵部署
  • 編寫 Operator 自動化應用生命周期

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

因為還涉及到了視頻,所以只能爭取一周兩更,在兩個月內全部更新完畢。

根據我自己的經驗,以上內容都掌握的話對 k8s 的掌握會更進一步。

部署應用到 k8s

首先從第一章【部署應用到 k8s】開始,我會用 Go 寫一個簡單的 Web 應用,然后打包為一個 Docker 鏡像,之后部署到 k8s 中,并完成其中的接口調用。

編寫應用

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

應用非常簡單就是提供了一個 ping  接口,然后返回了一個 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  
  
# 第二階段:構建可執行文件  
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}"  
  
# 啟動 Go 程序  
CMD ["k8s-combat"]

之后編寫了一個 dockerfile 用于構建 docker 鏡像。

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

使用 make docker  會在本地構建鏡像并上傳到 dockerhub。

編寫 deployment

下一步便是整個過程中最重要的環節了,也是唯一和 k8s 打交道的地方,那就是編寫 deployment。

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

其中我們最常見的就是 deployment,通常用于部署無狀態應用;現在還不太需要了解其他的組件,先看看 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 可以暫時不要關注,就理解為 deployment 的固定寫法即可。

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

中間的:

metadata:  
  labels:  
    app: k8s-combat

也很容易理解,就是給這個 deployment 打上標簽,通常是將這個標簽和其他的組件進行關聯使用才有意義,不然就只是一個標簽而已。

標簽是鍵值對的格式,key, value 都可以自定義。

而這里的  app: k8s-combat 便是和下面的 spec 下的 selector 選擇器匹配,表明都使用  app: k8s-combat  進行關聯。

而 template 中所定義的標簽也是為了讓選擇器和 template 中的定義的 Pod 進行關聯。

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

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

replicas: 1:表示只部署一個副本,也就是只有一個節點的意思。

部署應用

之后我們使用命令:

kubectl apply -f deployment/deployment.yaml

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

就會應用這個 deployment 同時將容器部署到 k8s 中,之后使用:

kubectl get pod

在后臺 k8s 會根據我們填寫的資源選擇一個合適的節點,將當前這個 Pod 部署過去。

就會列出我們剛才部署的 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

就會進入我們的容器,這個和使用 docker 類似。

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

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

這時候我們再開一個終端執行:

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

便可以打印容器中的日志,當然前提是應用的日志是寫入到了標準輸出中。

總結

以上就是這一章節的主要內容,重點就是將我們應用程序員打包為 docker 鏡像后上傳到鏡像倉庫,再配置好 deployment 由 k8s 進行調度運行。

相關的源碼和 yaml 資源文件都存在這里:

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

責任編輯:姜華 來源: crossoverJie
相關推薦

2023-09-08 08:09:12

k8sservice服務

2023-09-27 08:09:22

2022-04-22 13:32:01

K8s容器引擎架構

2020-05-12 10:20:39

K8s kubernetes中間件

2023-08-04 08:19:02

2023-02-27 07:40:00

2023-11-06 07:16:22

WasmK8s模塊

2022-09-07 09:22:36

SpringBootWeb

2024-11-27 16:37:57

2023-11-27 13:54:00

kubernetes高可用

2022-10-10 12:54:00

Flink運維

2023-11-06 01:17:25

主機容器選項

2024-02-01 09:48:17

2023-08-29 10:27:32

2022-09-05 08:26:29

Kubernetes標簽

2023-05-25 21:38:30

2023-08-03 08:36:30

Service服務架構

2023-07-11 07:12:21

Hadoop部署mysql

2023-07-10 07:22:16

2021-11-04 07:49:58

K8SStatefulSetMySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产999精品久久久 日本视频一区二区三区 | 欧美白人做受xxxx视频 | 亚洲色在线视频 | 日本不卡一区二区三区 | 不卡一二三区 | 99久久久国产精品 | 成年人黄色免费视频 | 91中文字幕在线观看 | 美女视频黄的免费 | 成人在线一区二区 | 久久亚洲天堂 | 国产一区二区精品在线 | 国内自拍偷拍一区 | 成人精品一区二区 | 国产在线中文字幕 | 日韩欧美大片 | 黄片毛片 | 久久精品久久久久久 | av一级毛片 | 中文在线一区二区 | 一区二区视频 | 欧美9999 | 久久精品这里精品 | 国产福利在线看 | 午夜网 | 国产天天操 | 国产一区二区精品在线 | 欧美片网站免费 | 国产黄色大片 | 成人午夜av | 国产精品成人一区二区 | 国产东北一级毛片 | 午夜视频网站 | 中文字幕的av | 国产欧美一区二区精品忘忧草 | 欧美精品一区在线发布 | 日产精品久久久一区二区福利 | 国产草草视频 | 一本色道精品久久一区二区三区 | 午夜在线影院 | 日韩在线中文字幕 |