kubebuilder實戰之一:準備工作kubebuilder實戰之一:準備工作

程式設計師欣宸發表於2021-08-25

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;

系列文章連結

  1. kubebuilder實戰之一:準備工作
  2. kubebuilder實戰之二:初次體驗kubebuilder
  3. kubebuilder實戰之三:基礎知識速覽
  4. kubebuilder實戰之四:operator需求說明和設計
  5. kubebuilder實戰之五:operator編碼
  6. kubebuilder實戰之六:構建部署執行
  7. kubebuilder實戰之七:webhook
  8. kubebuilder實戰之八:知識點小記

關於kubebuilder

  1. 在實際工作中,對kubernetes的資源執行各種個性化配置和控制是很常見的需求,例如自定義映象的pod如何控制副本數、主從關係,以及各種自定義資源的控制等;
  2. 對於上述需求,很適合使用Operator 模式來解決,這裡有官方對Operator的介紹:https://kubernetes.io/zh/docs/concepts/extend-kubernetes/operator/ ,Operator模式的執行流程如下圖所示:

在這裡插入圖片描述
3. 為了簡化Operator開發,我們可以選用一些已有的開源工具,kubebuilder就是其中之一,《kubebuilder實戰》系列就是對此工具由淺入深的實踐;

本篇概覽

作為《kubebuilder實戰》系列的開篇,除了前面對kubebuilder的簡單說明,還會列出整個實戰的通用環境資訊,以及涉及到的軟體版本,然後再搭建好kubebuilder開發環境,總的來說需要做好以下準備工作,才能順利開始kubebuilder的開發工作:

  1. kubectl安裝和配置,這樣可以在kubebuilder電腦上操作kubernetes環境;
  2. 安裝golang
  3. 安裝docker
  4. 安裝kustomize
  5. 安裝kubebuilder

環境資訊

如下圖,整個實戰環境一共由兩臺電腦組成:

在這裡插入圖片描述

  1. kubernetes電腦:hostname是k8s,上面執行著1.20版本的kubernetes,關於kubernetes的部署不是本文重點,請參考其他教程完成,需要確保kubernetes正常可用;
  2. kubebuilder電腦:作業系統是CentoOS-7.9.2009,hostname是kubebuilder,我們們的實戰就在這臺電腦上操作;
  3. kubebuilder版本:2.3.1
  4. go版本:1.15.6
  5. docker版本:19.03.13
  6. 為了省事兒,所有操作都是用root帳號執行的;

kubectl安裝和配置

  1. 執行以下命令線上安裝:
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

如果您無法訪問上述地址,可以在此下載(0積分):https://download.csdn.net/download/boling_cavalry/14925948

  1. kubectl檔案下載到linux機器後,執行命令chmod +x ./kubectl,給檔案可執行許可權;
  2. 執行以下命令,將kubectl移動到可以全域性訪問的目錄下:
mv ./kubectl /usr/local/bin/kubectl
  1. 新建~/.kube/目錄;
  2. 登入k8s電腦,在~/.kube/目錄下有個config檔案,將此檔案複製到kubebuilder電腦的~/.kube/目錄下;
  3. 回到kubebuilder電腦,此時執行kubectl命令可以直接操作k8s電腦上的kubernetes了:
[root@kubebuilder ~]# kubectl get nodes -o wide
NAME   STATUS   ROLES                  AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
k8s    Ready    control-plane,master   33m   v1.20.2   192.168.133.211   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://19.3.13
[root@kubebuilder ~]# 
[root@kubebuilder ~]# kubectl get pod --all-namespaces
NAMESPACE     NAME                          READY   STATUS    RESTARTS   AGE
kube-system   coredns-7f89b7bc75-fw928      1/1     Running   0          33m
kube-system   coredns-7f89b7bc75-tv7tk      1/1     Running   0          33m
kube-system   etcd-k8s                      1/1     Running   0          33m
kube-system   kube-apiserver-k8s            1/1     Running   0          33m
kube-system   kube-controller-manager-k8s   1/1     Running   0          33m
kube-system   kube-flannel-ds-q9f64         1/1     Running   0          32m
kube-system   kube-proxy-clmbf              1/1     Running   0          33m
kube-system   kube-scheduler-k8s            1/1     Running   0          33m

安裝golang

  1. 安裝必要應用:
yum install unzip tree wget gcc gcc-c++ kernel-devel -y
  1. 用我準備好的指令碼安裝golang並設定好環境變數:
curl -o install-go.sh \
https://raw.githubusercontent.com/zq2599/blog_demos/master/files/install-go.sh \
&& chmod a+x ./install-go.sh \
&& ./install-go.sh
  1. 執行完上述命令後,控制檯會輸出類似下面的內容,可見hello.go檔案可以被成功執行,表示go環境部署成功,並且輸出的環境變數也是正常的:
...
5. create go source file
package main

import "fmt"

func main() {
fmt.Println("Hello world!")
}
6. run hello.go
Hello world!
go1.15.6 install and check finished
  1. 執行source .bashrc確保當前shell環境中的環境變數已經生效;

安裝docker

  1. 執行以下命令完成docker的安裝和啟動:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce-19.03.13
systemctl start docker
systemctl enable docker
  1. 驗證安裝是否成功:
[root@kubebuilder ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.2
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        2291f61
 Built:             Mon Dec 28 16:17:48 2020
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.3
  GitCommit:        269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc:
  Version:          1.0.0-rc92
  GitCommit:        ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
  1. 設定映象加速,否則下載映象慢並且時常超時,執行以下命令完成映象加速的設定並使其生效:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

安裝kustomize

後面的操作中需要使用kustomize去做配置管理,執行以下命令即可安裝:

mkdir -p $GOPATH/bin
cd $GOPATH/bin
GOBIN=$(pwd)/ GO111MODULE=on go get sigs.k8s.io/kustomize/kustomize/v3

安裝kubebuilder

  1. 以下指令碼通過go命令確定當前系統和CPU架構,再去伺服器下載對應的kubebuilder檔案,然後設定環境變數:
os=$(go env GOOS)
arch=$(go env GOARCH)
curl -L https://go.kubebuilder.io/dl/2.3.1/${os}/${arch} | tar -xz -C /tmp/
mv /tmp/kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder
export PATH=$PATH:/usr/local/kubebuilder/bin
  1. 執行命令確認安裝成功:
[root@kubebuilder ~]# kubebuilder version
Version: version.Version{KubeBuilderVersion:"2.3.1", KubernetesVendor:"1.16.4", GitCommit:"8b53abeb4280186e494b726edf8f54ca7aa64a49", BuildDate:"2020-03-26T16:42:00Z", GoOs:"unknown", GoArch:"unknown"}
  • 至此,kubebuilder開發環境的準備工作就完成了,接下來的章節我們們正式進入開發實戰,一起去學習精彩的kubernetes operator;

你不孤單,欣宸原創一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 資料庫+中介軟體系列
  6. DevOps系列

歡迎關注公眾號:程式設計師欣宸

微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos

相關文章