成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

k8s :構(gòu)建系統(tǒng)

mumumu / 531人閱讀

摘要:前言大型軟件,一般都有自己的構(gòu)建系統(tǒng),也不例外,本文簡要介紹構(gòu)建系統(tǒng)構(gòu)建流程以為例,在命令行執(zhí)行以下命令在源代碼根目錄文件中定位到目標(biāo),該目標(biāo)的動(dòng)作是執(zhí)行腳本執(zhí)行將構(gòu)建過程拆分成一個(gè)個(gè)步驟,每個(gè)步驟

前言

大型軟件(linux,android .etc)一般都有自己的構(gòu)建系統(tǒng),k8s 也不例外,本文簡要介紹 k8s 構(gòu)建系統(tǒng)

構(gòu)建流程 release

以 quick-release 為例,在命令行執(zhí)行以下命令

# make quick-release

make 在源代碼根目錄 Makefile 文件中定位到 quick-release 目標(biāo),該目標(biāo)的動(dòng)作是執(zhí)行 build/release.sh 腳本

# kubernetes/Makefile
.PHONY: release-skip-tests quick-release
ifeq ($(PRINT_HELP),y)
release-skip-tests quick-release:
    @echo "$$RELEASE_SKIP_TESTS_HELP_INFO"
else
release-skip-tests quick-release: KUBE_RELEASE_RUN_TESTS = n
release-skip-tests quick-release: KUBE_FASTBUILD = true
release-skip-tests quick-release:
    build/release.sh <--- 執(zhí)行 kubernetes/build/release.sh
endif

release.sh 將構(gòu)建過程拆分成一個(gè)個(gè)步驟,每個(gè)步驟對應(yīng)一個(gè) shell function

# kubernetes/build/release.sh
...
kube::build::verify_prereqs
kube::build::build_image
kube::build::run_build_command make cross
...
kube::build::copy_output
kube::release::package_tarballs

verify_prereqs 對構(gòu)建環(huán)境進(jìn)行檢查,比如是否缺少一些工具軟件
build_image 創(chuàng)建構(gòu)建需要的 docker 鏡像 ???
run_build_command make cross 啟動(dòng)容器,運(yùn)行 make cross
copy_output, package_tar 處理構(gòu)建生成的各個(gè)文件

這里比較有意思的是 k8s 使用 docker 容器進(jìn)行構(gòu)建,可能是為了交叉編譯吧

構(gòu)建鏡像

kube::build::build_image 方法構(gòu)建基礎(chǔ)鏡像,同步 kubernetes 源代碼到 data container(數(shù)據(jù)卷容器)

function kube::build::build_image() {
  mkdir -p "${LOCAL_OUTPUT_BUILD_CONTEXT}"
  # Make sure the context directory owned by the right user for syncing sources to container.
  chown -R ${USER_ID}:${GROUP_ID} "${LOCAL_OUTPUT_BUILD_CONTEXT}"

  cp /etc/localtime "${LOCAL_OUTPUT_BUILD_CONTEXT}/"
  # 準(zhǔn)備鏡像構(gòu)建所需文件
  cp build/build-image/Dockerfile "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
  cp build/build-image/rsyncd.sh "${LOCAL_OUTPUT_BUILD_CONTEXT}/"
  dd if=/dev/urandom bs=512 count=1 2>/dev/null | LC_ALL=C tr -dc "A-Za-z0-9" | dd bs=32 count=1 2>/dev/null > "${LOCAL_OUTPUT_BUILD_CONTEXT}/rsyncd.password"
  chmod go= "${LOCAL_OUTPUT_BUILD_CONTEXT}/rsyncd.password"

  kube::build::update_dockerfile
  kube::build::set_proxy
  # 構(gòu)建鏡像
  kube::build::docker_build "${KUBE_BUILD_IMAGE}" "${LOCAL_OUTPUT_BUILD_CONTEXT}" "false"
  ...
  # 構(gòu)建數(shù)據(jù)卷鏡像,注意 ensure 這個(gè)詞~數(shù)據(jù)卷鏡像是可以復(fù)用的
  kube::build::ensure_data_container
  # 同步 kubernetes 源代碼到數(shù)據(jù)卷鏡像
  kube::build::sync_to_container
}

k8s 構(gòu)建過程中使用了以下幾種容器:

數(shù)據(jù)卷容器:存儲(chǔ) k8s 源代碼,其它容器啟動(dòng)時(shí)通過 --volume-from 共享數(shù)據(jù)卷

rsyncd 容器:運(yùn)行 rsyncd 服務(wù)(一種文件同步服務(wù)),將 k8s 源代碼從 host 同步到數(shù)據(jù)卷容器中

構(gòu)建容器:運(yùn)行構(gòu)建命令

源代碼同步

上文說到 k8s 構(gòu)建的時(shí)候會(huì)啟動(dòng)一個(gè)容器運(yùn)行 rsyncd 服務(wù),將 k8s 源代碼同步到數(shù)據(jù)卷容器,那么源代碼碼會(huì)被同步到哪里呢?

# kubernete/build/common.sh
function kube::build::sync_to_container() {
  kube::log::status "Syncing sources to container"

  kube::build::start_rsyncd_container

  kube::build::rsync 
    --delete 
    --filter="H /.git" 
    --filter="- /.make/" 
    --filter="- /_tmp/" 
    --filter="- /_output/" 
    --filter="- /" 
    --filter="H zz_generated.*" 
    --filter="H generated.proto" 
    "${KUBE_ROOT}/" "rsync://k8s@${KUBE_RSYNC_ADDR}/k8s/"
}

kube::build::rsync 方法將 KUBE_ROOT 目錄下的源代碼同步到 k8s@${KUBE_RSYNC_ADDR}/k8s/

查看 rsync 配置文件可以知道 k8s 這個(gè)虛擬目錄對應(yīng)的實(shí)際目錄

# kubernetes/build/build-image/rsyncd.sh
...
VOLUME=${HOME}

cat <"${CONFFILE}"
pid file = ${PIDFILE}
use chroot = no
log file = /dev/stdout
reverse lookup = no
munge symlinks = no
port = 8730
[k8s]
  numeric ids = true
  $USER_CONFIG
  hosts deny = *
  hosts allow = ${ALLOW} ${ALLOW_HOST-}
  auth users = k8s
  secrets file = ${SECRETS}
  read only = false
  path = ${VOLUME} <-- k8s 對應(yīng)的路徑 ${VOLUME} = ${HOME}
  filter = - /.make/ - /_tmp/
EOF

這個(gè) HOME 變量一般指向 用戶主目錄,但是從 go語言工程目錄結(jié)構(gòu) 來看 HOME 應(yīng)該指向類似 $GOPATH/src/k8s.io/kubernetes 的目錄,所以經(jīng)驗(yàn)和直覺告訴我們肯定有什么地方設(shè)置了 HOME 變量,通過搜索源代碼,證實(shí)確實(shí)如此

# kubernetes/build/build-image/Dockerfile
...
ENV HOME /go/src/k8s.io/kubernetes
WORKDIR ${HOME}
...
總結(jié)

通過分析 k8s 構(gòu)建系統(tǒng),可以學(xué)習(xí)像 Google 這樣的大廠是如何規(guī)劃大型軟件工程結(jié)構(gòu),構(gòu)建,發(fā)布

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/33053.html

相關(guān)文章

  • 構(gòu)建與定制:唯品會(huì) PaaS 基于 Kubernetes 的實(shí)踐

    摘要:基于年底或年初沒有推廣的現(xiàn)狀,唯品會(huì)部門目前已經(jīng)做了兩年的時(shí)間。唯品會(huì)現(xiàn)狀唯品會(huì)目前線上有一千多個(gè)域,每個(gè)域之間相互的依賴比較復(fù)雜,每次的部署發(fā)布困難。這是唯品會(huì)的架構(gòu),主要包含持續(xù)集成和持續(xù)部署。 數(shù)人云上海&深圳兩地容器之Mesos/K8S/Swarm三國演義的嘉賓精彩實(shí)錄第三更來啦。唯品會(huì)是數(shù)人云Meetup的老朋友,去年曾做過RPC服務(wù)框架和Mesos容器化的分享。本次分享中,...

    JackJiang 評論0 收藏0
  • 網(wǎng)易容器云平臺(tái)的微服務(wù)化實(shí)踐(一)

    摘要:本文是網(wǎng)易容器云平臺(tái)的微服務(wù)化實(shí)踐系列文章的第一篇。網(wǎng)易容器云平臺(tái)的前身是網(wǎng)易應(yīng)用自動(dòng)部署平臺(tái),它能夠利用云提供的基礎(chǔ)設(shè)施,實(shí)現(xiàn)包括構(gòu)建和部署一體化在內(nèi)的整個(gè)應(yīng)用生命周期管理。目前網(wǎng)易云容器服務(wù)團(tuán)隊(duì)以的方式管理著微服務(wù),每周構(gòu)建部署次數(shù)。 此文已由作者馮常健授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營經(jīng)驗(yàn)。 摘要:網(wǎng)易云容器平臺(tái)期望能給實(shí)施了微服務(wù)架構(gòu)的團(tuán)隊(duì)提供完...

    zhjx922 評論0 收藏0
  • 2018年已過半,Kubernetes和云原生的巨浪要把云計(jì)算帶向何處

    摘要:自年月舉辦以來,規(guī)模持續(xù)增大。本屆大會(huì)議題數(shù)量接近,比去年規(guī)模較大的北美峰會(huì)多出了近一倍。同時(shí)還在華為伙伴公有云等云平臺(tái)上創(chuàng)建集群并接入了他們的平臺(tái),以便于快速響應(yīng)技術(shù)峰會(huì)等大型活動(dòng)期間暴漲的計(jì)算量。 Kubernetes,云原生,service mesh,這些驚人的全球增長趨勢,令人欣喜之余迫不及待想要看看...

    Pines_Cheng 評論0 收藏0
  • Kubernetes和云原生的巨浪要把云計(jì)算帶向何處

    摘要:本屆大會(huì)議題數(shù)量接近,比去年規(guī)模較大的北美峰會(huì)多出了近一倍。同時(shí)還在華為伙伴公有云等云平臺(tái)上創(chuàng)建集群并接入了他們的平臺(tái),以便于快速響應(yīng)技術(shù)峰會(huì)等大型活動(dòng)期間暴漲的計(jì)算量。Kubernetes,云原生,service mesh,這些驚人的全球增長趨勢,令人欣喜之余迫不及待想要看看云原生在未來究竟會(huì)發(fā)展出怎樣一派繁榮的景象。 容器領(lǐng)域最具影響力的技術(shù)峰會(huì)之一 KubeCon + Cloud...

    hizengzeng 評論0 收藏0
  • serverless在微店node領(lǐng)域的探索應(yīng)用

    摘要:參與者流量來自于內(nèi)部系統(tǒng)和外部流量,其中大部分來自于外部流量。水平擴(kuò)容服務(wù)的水平擴(kuò)容重要性不言而喻。 背景 目前微店中臺(tái)團(tuán)隊(duì)為了滿足公司大部分產(chǎn)品、運(yùn)營以及部分后端開發(fā)人員的嘗鮮和試錯(cuò)的需求,提供了一套基于圖形化搭建的服務(wù)端接口交付方案,利用該方案及提供的系統(tǒng)可生成一副包含運(yùn)行時(shí)環(huán)境定義可立即運(yùn)行的工程代碼,最后,通過 某種serverless平臺(tái) 實(shí)現(xiàn)生成后代碼的部署、CI、運(yùn)行、反...

    mikyou 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<