<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    從Go程序第一行代碼,到在 K8s 上運行,要經歷多少步?

    一顆小胡椒2022-07-21 11:30:04

    大家好,我是網管。咱們的 K8s 入門和實踐,在經歷了三篇理論知識的后,相信各位都已經期待許久(可能的吧),就差私信我:“你整著理論整半天有啥用,本大人寫的程序怎么能放到 K8s 上運行”。

    別急,今天這篇文章就帶你從寫第一行代碼開始,一步步教你把程序放到 K8s 跑起來。這次咱們先用 Go 做個例子,后面再寫一篇怎么把 Spring Boot 應用放到 K8s 上運行。

    本文的重點,不在于那種語言寫的程序,而是先學會應用 上到 K8s 的步驟,所以編程部分的演示非常簡單,恨不能寫一行代碼就帶你進入后面的 K8s 部署環節,不過要部署咱們得先有個環境,這里不需要你有啥云服務器,電腦上安裝就行了。

    K8s 本機環境安裝

    在個人電腦上安裝 K8s 可選的軟件,主要有這么幾種:

    • minikube。
    • Kind。
    • Docker 桌面應用自帶的 K8s 集群。

    其中 minikube、DockerDesktop 內嵌K8s 這兩種,咱們之前都寫文章介紹過,不過兩年過去了,我不再推薦各位安裝 minikube,原因很簡單我的 2021款 "誒嘛姨麥克斯,邁步可”都扛不住他造。還是用后兩者吧,如果圖省事Docker桌面應用自帶的 K8s 集群完全就夠用,安裝指南可以參考:

    一個 Go 應用,想在 K8s 上運行

    怎么把一個 Go 開發的 Web 應用部署到 K8s 集群上運行,有哪幾個步驟要完成的呢,這里我們先歸納一下,后面依次對每一步進行演示。

    因為 K8s 是基于容器技術的分布式架構方案,所以首先我們需要把要部署的應用程序打包到容器鏡像里,當然,在那之前我們得先寫好應用代碼。

    這里會把我們上面理論部分的知識點再串一遍,主要有這么幾個步驟:

    • 把 Web 程序打包成容器鏡像
    • 使用上一步打包的鏡像,創建應用的Pod
    • 用 Deployment 調度應用
    • 使用 Service 暴露應用
    • 通過 Ingress 代理應用

    好了,這五步大家一定要記住,下面我們逐一展開,詳細說說。

    把 Web 程序打包成容器鏡像

    首先看下面這個簡單的程序

    這里是用 Go 程序起了一個特別簡單的 HTTP Server,訪問 "/" 路徑后向頁面上打印一行文字,告訴訪問者他正在訪問的網頁的主機地址。

    下面是打包鏡像用的 Dockerfile

    打包 Go 應用鏡像的 Dockerfile

    接下來,我們使用下面的命令打包應用鏡像:

    docker build -t registry.cn-hangzhou.aliyuncs.com/docker-study-lab/simple-app-go:v0.2 .
    

    打包好后,就是上傳啦,這樣各位就能用啦。

    docker push registry.cn-hangzhou.aliyuncs.com/docker-study-lab/simple-app-go:v0.2
    

    這個鏡像倉庫是阿里云上的,不知道哪位好心人創建的,貌似誰都可以傳,不過前提是你得在阿里云上開個鏡像云的賬號,然后用 docker login 命令配置下自己的客戶端。這塊,咱們就不細說啦

    配置 Pod 和 Deployment

    還記得我在上面文章 -- K8s 面向對象里說過

    Deployment 是一個復合型的控制器,它包裝了一個叫做 ReplicaSet -- 副本集的控制器。ReplicaSet 管理正在運行的Pod數量,Deployment 在其之上實現 Pod 滾動更新,對Pod的運行狀況進行健康檢查以及回滾更新的能力

    所以,這里我們直接把步驟2、3合起來一起說。其實也沒啥好說的,直接上-- Deployment 的 YAML 配置

    拿到這個配置后,直接用 kubectl -f xxx.yaml 命令把 Deployment 提交給 K8s集群,讓它幫助我們創建好,Deployment、ReplicaSet、Pod 這些對象就好。

    這里我們只是使用了 Deployment 最基本的功能,想了解更多關于滾動更新配置和健康檢查等進階功能的,可以參考之前的文章:

    用 Service 暴露服務

    創建好上面這幾個對象后,我們的應用只能在 K8s 集群的內部使用,想能從外部訪問就得把應用暴露出來,這個時候就需要 Service 這個對象了。Service 對象具體的概念解釋,咱們還是看上一篇文章,這里不再贅述了。

    下面是一個 NodePort 型的 Service,它把咱們的服務暴露在 30088 這個端口。

    這樣在電腦上通過 127.0.0.1:30088 就能訪問到我們的服務啦。

    用 Ingress 代理服務

    Node Port 類型的 Service 對象的缺點,咱們上一篇文章提到過,所以實際操作的時候,咱們可以把上面那個例子里的 type 字段去掉,創建一個默認的只能在集群內使用的 ClusterIp類型的 Service 對象,再用 Ingress 代理 Service,完成服務的向外暴露,這樣更優雅也更好管理一些。

    使用 Ingress 前需要先安裝 Ingress Controller ,這里我們使用開源的 Ingress-Nginx

    • 安裝參考這個,非常簡單 :https://kubernetes.github.io/ingress-nginx/deploy/

    然后就是聲明代理我們的 Go Web 應用的 Ingress 對象

    通過 kubctl apply -f 命令把它提交給 K8s 集群,創建 Ingress 對象。

    Ingress 對象創建好后,我們就能通過 app.example.com 訪問咱們的服務啦,當然前提是在電腦上配置一下咱們的 hosts 文件,添加一下這個域名到127.0.0.1 的綁定。

    k8s虛擬侵入
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    目前發現并沒有將kubernetes和Docker技術產生背景和需求進行比較的文章,本文從最純正的官方定義角度出發并展開,闡述二者產生背景及與傳統技術對比。官方定義2:k8s是一個開源的容器集群管理系統,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。
    初識Kubernetes 集群
    2022-05-24 15:41:41
    Kubernetes (K8s) 集群是一組節點,它們以高效、自動化、分布式和可擴展的方式運行容器化應用程序。 K8s 集群允許工程師跨多個物理、虛擬和云服務器編排和監控容器。這將容器與底層硬件層分離,并實現敏捷和健壯的部署。一個 Kubernetes 集群由一組工作機器組成,稱為節點,運行容器化應用程序。 每個集群至少有一個工作節點,工作節點托管豆莢它們是應用程序工作負載的組成部分。這控制平
    雖然網上有大量從零搭建 K8S 的文章,但大都針對老版本,若直接照搬去安裝最新的 1.20 版本會遇到一堆問題。故此將我的安裝步驟記錄下來,希望能為讀者提供 copy and paste 式的集群搭建幫助。
    雖然網上有大量從零搭建?的文章,但大都針對老版本,若直接照搬去安裝最新的?版本會遇到一堆問題。故此將我的安裝步驟記錄下來,希望能為讀者提供?式的集群搭建幫助。服務等,可供用戶免費下載、使用和分享。??啟動的三節點服務已經配置好了以下使用?節點進行演示查看,其他節點操作均一致#?
    容器安全之CVE-2022-0185
    2022-03-28 16:35:58
    最近的CVE-2022-0185還是挺有意思的,在谷歌kctf(基于 K8s 的 CTF)中被發現。這個洞是在Linux內核的文件系統上下文中功能中的legacy_parse_param函數驗證長度的代碼處有缺陷,導致了一個基于堆的緩沖區溢出(整數下溢)。 攻擊影響為越界寫入/拒絕服務/權限提升和特定場景下的容器逃逸(k8s)。 其中會涉及到一些容器安全的基礎小知識,有必要簡單學習一下這個洞。
    工作需要,本周安裝了vmware-tanzu社區版,記錄如下, all in one,ubuntu20.04, sudo apt update, sudo apt dist-upgrade, 安裝docker, sudo apt install docker.io, sudo systemctl enable docker, sudo gpasswd -a ubuntu docker
    保留的這部分資源主要提供給系統進程使用。cpuManager 當前的限制:最大 numa node 數不能大于 8,防止狀態爆炸。策略只支持靜態分配 cpuset,未來會支持在容器生命周期內動態調整 cpuset。下文有介紹相應的提案。支持這種場景需要對 CPU 進行分組分配。
    與此項目相關的贊助商列表。以他們認為合適的方式擴展他們的服務。擁有自己特定于其服務的監控、備份和災難恢復。容器在如何使用網絡方面受到限制。基本上,任何 Linux 可執行文件都可以受到限制,即可以“容器化”。通常這些文件,通常稱為“容器鏡像”,也稱為容器。
    2021 年 6 月 21 日,Scott Logic 發布了 2021 年 WebAssembly 用戶報告。報告中顯示 69% 的受訪者認為 Wasm 將對未來的 Web 開發產生非常大的影響,同時受訪者還預計 Wasm 將會對不同應用領域產生重要影響。
    從云的虛擬化管理平臺和云網絡構架的一般性知識入手,以 Clos 云網絡架構和 Kubernetes管理平臺為例,俯瞰了當前云計算環境的全貌和細節,宏觀上總覽了云網絡架構和 Kubernetes 管理平臺,微觀上深入連接 fabrics 和容器的細節。
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类