国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何在K8S平臺部署微服務(wù)

xingqiba / 2114人閱讀

摘要:本文將介紹如何使用部署微服務(wù),包括服務(wù)發(fā)現(xiàn),監(jiān)控,路由,日志。如何查看二進(jìn)制文件的動(dòng)態(tài)依賴動(dòng)態(tài)依賴庫動(dòng)態(tài)依賴庫編譯使用,而使用的是所以在下編譯的文件一般不能直接使用在環(huán)境。

Deploying Micro-services on Kubernetes

本文將介紹如何使用 kubernetes 部署微服務(wù),包括 服務(wù)發(fā)現(xiàn),監(jiān)控,路由,日志。用實(shí)際的例子來演示自動(dòng)化流程。主要分為以下幾個(gè)部分:

5分鐘搭建 K8S 集群

部署 CNI 網(wǎng)絡(luò)

部署監(jiān)控服務(wù)

部署網(wǎng)關(guān)

部署日志服務(wù)

部署一個(gè)應(yīng)用

5分鐘搭建 K8S 集群

第一次完全手動(dòng)搭建集群大約花了一周時(shí)間,主要的問題是在于

K8S的組件多,每個(gè)程序的參數(shù)有不少,哪些是關(guān)鍵的參數(shù)需要花時(shí)間搞清楚。

萬惡的墻,代理訪問外網(wǎng)比較慢

CNI網(wǎng)絡(luò)問題,主要是 CNI 網(wǎng)段和云上的局域網(wǎng)網(wǎng)段沖突了,基礎(chǔ)知識缺失導(dǎo)致

K8S 的證書和驗(yàn)證方式不清楚

本文相關(guān)代碼位于github, 歡迎star。

手動(dòng)部署可以參考我之前的博文,即便是完全熟悉部署流程,不寫腳本的情況下,如果純手動(dòng) setup 或者 tear down 一個(gè)集群,都是比較耗時(shí)間的。直到發(fā)現(xiàn)了這個(gè)工具 kubeadm, 世界美好了。

這個(gè)工具對操作系統(tǒng)有限制, ubuntu 16.04 或 centos 7 以上。其實(shí)當(dāng)初也看到了這個(gè)工具, 不過 因?yàn)橄到y(tǒng)限制,并且kubeadm還在alpha版本,又想手動(dòng)擼一遍部署過程,所以沒直接采用。 不過 kubeadm 不建議在生產(chǎn)環(huán)境中使用,在 官方文檔中的 limitation 中有詳細(xì)解釋.

文檔 中第一點(diǎn)就說了, kubeadm部署的是 single master,意味著不是高可用,謹(jǐn)慎使用。 但是作為演示實(shí)例再合適不過。

小插曲: 因?yàn)樽罱l(fā)布的 k8s 1.6 的 kubeadm 有一個(gè)bug,導(dǎo)致用以下步驟安裝會(huì)有問題,為此社區(qū)里有人提了一個(gè)patch, 步驟有些多,我寫在本文最后了。
kubeadm v1.6.1 已經(jīng)修復(fù)了bug。

開始部署步驟:

在 Digital Ocean 中開三臺機(jī)器, centos 7,建議2C2G,按小時(shí)計(jì)費(fèi)用不了多少錢,用完就銷毀。 如果還沒有注冊賬號,并且覺得本文對你有幫助,可以用我的 referral link 注冊,可以得到 10美金, 鏈接. 發(fā)現(xiàn)一個(gè)更便宜的vps, vultr, 還是SSD

登錄三臺機(jī)器,安裝必要組件.

yum clean
yum update -y
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
    https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y docker kubelet kubeadm kubectl kubernetes-cni
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

# 補(bǔ)充幾點(diǎn)
# 1. 因?yàn)?.6開始K8S開啟了 RBAC 驗(yàn)證,需要在啟動(dòng) kubelet 的參數(shù)中添加 --authentication-token-webhook
vim vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
添加 --authentication-token-webhook

# 2. 如果是 centos, 還需要添加 --cgroup-driver=systemd
# 3. v1.6開始,apiserver禁用了 insecure-port, 需要拷貝 /var/kubernetes/ 下的 admin config, 作為驗(yàn)證配置.

選擇一臺作為master, 運(yùn)行

kubeadm init

# 輸出
Your Kubernetes master has initialized successfully!

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
    http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node:

kubeadm join --token=e344fa.e007ce406eb41f07 104.236.166.119
完成后會(huì)看到提示: `kubeadm join --token=311971.7260777a25d70ac8 104.236.166.119`

在其他兩臺機(jī)器上分別運(yùn)行以上提示的命令

在 master 上查看狀態(tài), kubectl get nodes, 如果看到一共有2個(gè)node,一個(gè)master, 則表示集群創(chuàng)建成功。

部署CNI網(wǎng)絡(luò)

kubeadm 自動(dòng)部署了一個(gè)插件,就是 kube-dns, 用于服務(wù)發(fā)現(xiàn),但是到這里你會(huì)發(fā)現(xiàn) kube-dns 這個(gè)服務(wù)沒有啟動(dòng)成功,因?yàn)槲覀冞€沒有部署CNI網(wǎng)絡(luò)。

kubectl get pods --all-namespaces | grep dns

這里有比較多的選擇,我使用了 calico,因?yàn)樾阅鼙容^好,支持一鍵部署。 這里有一篇對比容器網(wǎng)絡(luò)的文章,優(yōu)缺點(diǎn)介紹比較全面, Battlefield: Calico, Flannel, Weave and Docker Overlay Network

配置文件在cni目錄下,或者可以直接在master運(yùn)行:

# for v1.6.0
kubectl apply -f http://docs.projectcalico.org/v2.1/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml

再次查看 dns 服務(wù)是否運(yùn)行成功吧。

# 按需安裝 git 和 dig
yum install -y bind-utils git 
監(jiān)控

在部署之前,我們需要對兩臺node標(biāo)記角色,k8s是通過label來自定義各個(gè)資源的類型的。
首先確定兩臺node的name, 通過 kubectl get nodes來查看,之后挑選其中一臺作為前端機(jī)器(frontend).

kubectl label node centos-2gb-sfo1-03 role=frontend

這里把centos-2gb-sfo2-node1換成你的 node name

Prometheus

應(yīng)用 monitor 目錄下的兩個(gè)配置文件,如下

kubectl create -f prometheus.config.yaml
kubectl create -f prometheus.deploy.yaml

接下來打開 http://front-end-ip:30900 就能看到 prometheus 的界面

Grafana
kubectl create -f grafana.deploy.yaml

打開 http://front-end-ip:30200 就能看到 grafana 的界面.

還需要添加一個(gè) Data Source. 選擇 Promethues, 地址填上:
http://promethues:9090, 因?yàn)橛衚ube-dns,所以這樣就能訪問 pod 中的 service

添加模板,內(nèi)容為 grafana.config.k8s.json, 這個(gè)模板是針對 k8s 集群的儀表模板,添加時(shí)選擇對應(yīng)的 Data Source,然后就能看到效果。

網(wǎng)關(guān)

類似上面的步驟,配置文件在 gateway 目錄下,運(yùn)行

kubectl create -f traefik.yaml

這樣在 http://front-end-ip:30088 能看到 網(wǎng)關(guān)的 dashboard。

traefik 可以監(jiān)聽 etcd 中注冊的 ingress 的變化,根據(jù) ingress 資源來自動(dòng)配置路由, 下面會(huì)有具體的示例。最后的效果是, 后端服務(wù)的配置文件中定義他自己的 服務(wù)domain 和 prefix, traefik會(huì)自動(dòng)添加這個(gè)路由, 這樣就可以通過gateway來訪問后端服務(wù)了。

日志收集

官方有推薦的Log系統(tǒng): cAdvisor 和 Heapster.
我比較偏愛 ELK, 主要是生態(tài)比較好。有兩種方式應(yīng)用:

第一種是每個(gè)Pod都多加一個(gè) sidecar - Filebeat, 在每個(gè)后端服務(wù)配置文件中指定本地log的路徑(利用 k8s 的 emptyDir 這個(gè)volume),在filebeat的配置中指定這個(gè)路徑,實(shí)現(xiàn)日志收集

還有一種是Filebeat作為 DaemonSet 運(yùn)行在每臺機(jī)器,利用 k8s 的 hostPath 這個(gè)volume, 這樣每臺機(jī)器只有一個(gè) filebeat 運(yùn)行,監(jiān)聽一個(gè)指定目錄;后端服務(wù)約定好log都寫入這個(gè)目錄的子目錄中,這樣也能達(dá)到收集效果。

我比較推薦第二種方式,工作量稍微小一些。

第一個(gè)服務(wù)

終于到了這個(gè)緊張刺激的環(huán)節(jié)。

源文件在 hello-app 目錄下,一個(gè)簡單的 http service, 主要包含兩個(gè)路由:

/metrics 返回 prometheus 抓取的數(shù)據(jù)格式

/ 其他Path,返回一個(gè)隨機(jī)id和URI

log 日志輸入 /tmp/hello-log/hello-app.log;

想要達(dá)到的效果是:

配置文件中配好路由,自動(dòng)注冊到 gateway

promethues 自動(dòng)發(fā)現(xiàn)服務(wù),抓取 http://hello:8080/metrics 的監(jiān)控?cái)?shù)據(jù)

日志能夠自動(dòng)收集

app 的配置文件位于 hello-app 目錄下, 運(yùn)行:

kubectl create -f hello.yaml

接著去 gateway 和 prometheus 的 dashboard 看下,會(huì)發(fā)現(xiàn)服務(wù)已經(jīng)被發(fā)現(xiàn);


再測試一下通過gateway是否能訪問到 hello-app 這個(gè)服務(wù):

curl http://front-end-ip:30087/v1/hello -H "Host: www.hello.local"
#結(jié)果為:
ID:5577006791947779410 path:/hello
編譯安裝 kubeadm

下載 kubernetes 項(xiàng)目, checkout v1.6.0, 必須是這個(gè)tag

cherry-pick 89557110ed4693a7d23e515e738ced266e099365

KUBE_BUILD_PLATFORMS=linux/amd64 hack/make-rules/build.sh cmd/kubeadm

把生成的 _output 文件打包,放入服務(wù)器上

按照本文第一部分的步驟 yum 安裝 docker, kubelet

編輯文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 添加 參數(shù)--cgroup-driver=systemd

sudo systemctl daemon-reload && sudo systemctl restart kubelet.service

kubeadm init 能完成,但是 node 狀態(tài)是 not-ready,因?yàn)?cni 沒有配置.

復(fù)制 /etc/kubernetes/admin.conf 文件到 ~/.kube/config 然后 執(zhí)行 kubectl get nodes才可以,因?yàn)樾掳娴腶piserver啟動(dòng)時(shí),把 insecure-port 禁用了,8080端口不再可用.

Alpine Linux

這次還遇到一個(gè)問題, alpine的docker鏡像使用不順利,ubuntu, centos下編譯的文件在 alpine 下無法運(yùn)行, 記得之前還運(yùn)行成功過,這次得仔細(xì)找找原因。

如何打包出最小鏡像 靜態(tài)編譯

CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o hello hello-app/*.go

the -a flag means to rebuild all the packages we’re using, which means all the imports will be rebuilt with cgo disabled.
https://github.com/golang/go/...

建議使用 bash 作為 base image, 畢竟還有一些操作例如 mkdir, mv , cp 等需要執(zhí)行。

如何查看 二進(jìn)制文件 的 動(dòng)態(tài)依賴?

# ldd hello

linux-vdso.so.1 =>  (0x00007ffde7df8000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff931ae5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff93171e000)
/lib64/ld-linux-x86-64.so.2 (0x00005637b0ae4000)


# readelf -d hello

Dynamic section at offset 0x697100 contains 19 entries:
  Tag        Type                         Name/Value
 0x0000000000000004 (HASH)               0xa959e0
 0x0000000000000006 (SYMTAB)             0xa95e60
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000005 (STRTAB)             0xa95c40
 0x000000000000000a (STRSZ)              518 (bytes)
 0x0000000000000007 (RELA)               0xa95650
 0x0000000000000008 (RELASZ)             24 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x0000000000000003 (PLTGOT)             0xa97000
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0] // 動(dòng)態(tài)依賴庫
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6] // 動(dòng)態(tài)依賴庫
 0x000000006ffffffe (VERNEED)            0xa95960
 0x000000006fffffff (VERNEEDNUM)         2
 0x000000006ffffff0 (VERSYM)             0xa95920
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000002 (PLTRELSZ)           648 (bytes)
 0x0000000000000017 (JMPREL)             0xa95680
 0x0000000000000000 (NULL)               0x0
Alpine 編譯

alpine linux 使用 musl libc,而 ubuntu, centos 使用的是 glibc, 所以在 ubuntu,centos下編譯的文件一般不能直接使用在 alpine 環(huán)境。

# export WORKDIR=/go/src/hello-app

# docker run --rm -v $GOPATH/src:/go/src -v "$PWD":${WORKDIR} -w ${WORKDIR} golang:1.8-alpine go build -o hello-alpine hello-app/main.go

注意,編譯的依賴package 被映射入了 /go/src 中; -w 表示 working directory.

http://web-rat.com/posts/2016...

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/32550.html

相關(guān)文章

  • 如何K8S平臺部署服務(wù)

    摘要:本文將介紹如何使用部署微服務(wù),包括服務(wù)發(fā)現(xiàn),監(jiān)控,路由,日志。如何查看二進(jìn)制文件的動(dòng)態(tài)依賴動(dòng)態(tài)依賴庫動(dòng)態(tài)依賴庫編譯使用,而使用的是所以在下編譯的文件一般不能直接使用在環(huán)境。 Deploying Micro-services on Kubernetes 本文將介紹如何使用 kubernetes 部署微服務(wù),包括 服務(wù)發(fā)現(xiàn),監(jiān)控,路由,日志。用實(shí)際的例子來演示自動(dòng)化流程。主要分為以下幾個(gè)部...

    blastz 評論0 收藏0
  • 網(wǎng)易容器云平臺服務(wù)化實(shí)踐(一)

    摘要:本文是網(wǎng)易容器云平臺的微服務(wù)化實(shí)踐系列文章的第一篇。網(wǎng)易容器云平臺的前身是網(wǎng)易應(yīng)用自動(dòng)部署平臺,它能夠利用云提供的基礎(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)易云容器平臺期望能給實(shí)施了微服務(wù)架構(gòu)的團(tuán)隊(duì)提供完...

    zhjx922 評論0 收藏0
  • 容器 PaaS 新技術(shù)架構(gòu)下的運(yùn)維實(shí)踐

    摘要:王磊此次演講的題目為容器新技術(shù)架構(gòu)下的運(yùn)維實(shí)踐,詳細(xì)為大家講解了在基于構(gòu)建容器的過程中,如何以應(yīng)用為中心,通過新的技術(shù)工具對服務(wù)節(jié)點(diǎn)集群平臺等多個(gè)方面進(jìn)行管理運(yùn)維,提高系統(tǒng)的自動(dòng)化運(yùn)維能力。 2018年11月16-17日,運(yùn)維&容器技術(shù)盛會(huì) CNUTCon 全球運(yùn)維技術(shù)大會(huì)在上海·光大會(huì)展中心成功舉辦。時(shí)速云聯(lián)合創(chuàng)始人兼 CTO 王磊受邀參加此次大會(huì),并發(fā)表主題演講。王磊此次演講的題目...

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

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

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

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

    Pines_Cheng 評論0 收藏0

發(fā)表評論

0條評論

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