網(wǎng)站首頁 編程語言 正文
作為k8s官方維護(hù)的客戶端,k8s go-client對(duì)于go語言中使用k8s可以說是唯一選項(xiàng)。但是官方的使用示例我個(gè)人覺得并不是很清晰,尤其是對(duì)于對(duì)于k8s并不熟悉的用戶。這里我總結(jié)一下使用過程中碰到的坑,也希望能給有需要的人一些參考。
首先從官方示例說起:這里先解釋一下k8s連接問題。集群的節(jié)點(diǎn)上會(huì)有一個(gè).kube目錄(這個(gè)目錄一般在root用戶home目錄下)目錄中會(huì)存在一個(gè)config文件,文件中記錄了連接k8s集群所需的所有信息,如apiserver地址,用戶認(rèn)證token等。一般來說客戶端連接集群均需要此配置文件。一下就是官方示例代碼。
var kubeconfig *string //配置了config目錄就讀取該目錄下的config信息 if home := homedir.HomeDir(); home != "" { kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file") } else { //否則就需要指定配置文件路徑 kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file") } flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err) } clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err) }
可以看到初始化go-client必須要指定config文件。但是實(shí)際使用中往往沒有這里理想化,比如我們的代碼運(yùn)行在集群外,再比如我們的代碼連接的client需要在不同集群上來回切換,更甚者我們需要連接的集群會(huì)隨時(shí)改變,集群數(shù)量改變,集群的連接信息改變。總之很多情況下無法直接從集群獲取到config文件,也無法使用固定的config文件。
總體上來說,使用場(chǎng)景包括集群內(nèi)和集群外訪問,同時(shí)也可以分為固定訪問和動(dòng)態(tài)訪問。對(duì)于集群內(nèi)且集群的配置是固定的,使用起來還是相當(dāng)簡(jiǎn)單。
1、集群內(nèi)且集群配置固定,以進(jìn)程方式運(yùn)行,即代碼編譯后直接以進(jìn)程的方式運(yùn)行在集群的某個(gè)節(jié)點(diǎn)上且只會(huì)訪問本地或外部固定集群。這種情況下,本地集群config文件路徑是固定的,外部集群可以提前把config文件放到本地,使用示例代碼的配置方式即可
2、集群內(nèi)且集群配置固定,以pod方式運(yùn)行。對(duì)于本地集群,雖然pod就跑在集群中,但是容器的因?yàn)楦綦x性,無法獲取集群的配置信息。此時(shí)可以通過默認(rèn)配置跟k8s RBAC進(jìn)行本地集群訪問,即使用pod中的默認(rèn)apiserver地址和端口環(huán)境變量(可以直接使用go-client的默認(rèn)config rest.InclusterConfig)連接集群,同時(shí)給pod配置集群的admin角色即可。也可以將.kube目錄掛載到pod上,通過讀取該目錄中的配置文件初始化客戶端。訪問外部集群跟1中的方式無太大差別。
3、需要訪問的集群不固定(集群數(shù)量隨時(shí)增減,集群認(rèn)證信息會(huì)過期),這種情況下無論是否運(yùn)行在容器中都不太好使用官方的示例代碼來連接集群。此種情況下需要一個(gè)能夠獲取集群認(rèn)證信息(token,user password等)的地方。有了這些信息代碼中就可以手動(dòng)新建config,通過這個(gè)config來初始化集群,同時(shí)在認(rèn)證信息失效后及時(shí)重新初始化
手動(dòng)指定apiserver地址,這里地址可以是url也可以主機(jī)加端口 ??
kubeconfig,er := clientcmd.BuildConfigFromFlags(apiUrl,"")
配置認(rèn)證信息,token或者用戶名加密碼或者其他認(rèn)證方式
kubeconfig.BearerToken = token
初始化client
clientset, err := kubernetes.NewFo,rConfig(kubeconfig)
當(dāng)發(fā)生變動(dòng)或者認(rèn)證信息失效時(shí),客戶端或報(bào)相應(yīng)的權(quán)限錯(cuò)誤,即可重新獲取認(rèn)證信息,重新初始化。這樣可以保證不重啟程序,不手動(dòng)修改配置的情況下適應(yīng)集群變動(dòng)
原文鏈接:https://www.cnblogs.com/zziawanblog/p/14539246.html
相關(guān)推薦
- 2022-09-07 Python的flask常用函數(shù)route()_python
- 2022-11-25 Python?Playwright的使用詳解_python
- 2022-10-01 Python類和對(duì)象基礎(chǔ)入門介紹_python
- 2022-12-08 linux服務(wù)器中搭建redis6.0.7集群_Redis
- 2022-07-14 React?Native采用Hermes熱更新打包方案詳解_React
- 2022-06-21 C語言超全面講解函數(shù)的使用方法上_C 語言
- 2022-07-01 react-router-dom?V6的配置使用實(shí)踐_React
- 2022-11-24 Django中ORM基本應(yīng)用與原理解析_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支