1. 程式人生 > >(二)超詳細純手工搭建kubernetes(k8s)叢集

(二)超詳細純手工搭建kubernetes(k8s)叢集

1. 部署ETCD(主節點)

1.1 簡介

kubernetes需要儲存很多東西,像它本身的節點資訊,元件資訊,還有通過kubernetes執行的pod,deployment,service等等。都需要持久化。etcd就是它的資料中心。生產環境中為了保證資料中心的高可用和資料的一致性,一般會部署最少三個節點。我們這裡以學習為主就只在主節點部署一個例項。

如果你的環境已經有了etcd服務(不管是單點還是叢集),可以忽略這一步。前提是你在生成配置的時候填寫了自己的etcd endpoint哦~

1.2 部署

etcd的二進位制檔案和服務的配置我們都已經準備好,現在的目的就是把它做成系統服務並啟動。

#把服務配置檔案copy到系統服務目錄
$ cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/#enable服務 $ systemctl enable etcd.service #建立工作目錄(儲存資料的地方) $ mkdir -p /var/lib/etcd # 啟動服務 $ service etcd start # 檢視服務日誌,看是否有錯誤資訊,確保服務正常 $ journalctl -f -u etcd.service

2. 部署APIServer(主節點)

2.1 簡介

kube-apiserver是Kubernetes最重要的核心元件之一,主要提供以下的功能

  • 提供叢集管理的REST API介面,包括認證授權(我們現在沒有用到)資料校驗以及叢集狀態變更等
  • 提供其他模組之間的資料互動和通訊的樞紐(其他模組通過API Server查詢或修改資料,只有API Server才直接操作etcd)

生產環境為了保證apiserver的高可用一般會部署2+個節點,在上層做一個lb做負載均衡,比如haproxy。由於單節點和多節點在apiserver這一層說來沒什麼區別,所以我們學習部署一個節點就足夠啦

2.2 部署

APIServer的部署方式也是通過系統服務。部署流程跟etcd完全一樣,不再註釋

$ cp target/master-node/kube-apiserver.service 
/lib/systemd/system/ $ systemctl enable kube-apiserver.service $ service kube-apiserver start $ journalctl -f -u kube-apiserver

2.3 重點配置說明

[Unit]
Description=Kubernetes API Server

[Service]
#可執行檔案的位置
ExecStart=/home/michael/bin/kube-apiserver \
#非安全埠(8080)繫結的監聽地址 這裡表示監聽所有地址
–insecure-bind-address=0.0.0.0 \
#不使用https
–kubelet-https=false \
#kubernetes叢集的虛擬ip的地址範圍
–service-cluster-ip-range=10.68.0.0/16 \
#service的nodeport的埠範圍限制
–service-node-port-range=20000-40000 \
#很多地方都需要和etcd打交道,也是唯一可以直接操作etcd的模組
–etcd-servers=http://192.168.1.102:2379 \

3. 部署ControllerManager(主節點)

3.1 簡介

Controller Manager由kube-controller-manager和cloud-controller-manager組成,是Kubernetes的大腦,它通過apiserver監控整個叢集的狀態,並確保叢集處於預期的工作狀態。
kube-controller-manager由一系列的控制器組成,像Replication Controller控制副本,Node Controller節點控制,Deployment Controller管理deployment等等
cloud-controller-manager在Kubernetes啟用Cloud Provider的時候才需要,用來配合雲服務提供商的控制

controller-manager、scheduler和apiserver 三者的功能緊密相關,一般執行在同一個機器上,我們可以把它們當做一個整體來看,所以保證了apiserver的高可用即是保證了三個模組的高可用。也可以同時啟動多個controller-manager程序,但只有一個會被選舉為leader提供服務。

3.2 部署

通過系統服務方式部署

$ cp target/master-node/kube-controller-manager.service /lib/systemd/system/
$ systemctl enable kube-controller-manager.service
$ service kube-controller-manager start
$ journalctl -f -u kube-controller-manager

3.3 重點配置說明

[Unit]
Description=Kubernetes Controller Manager

[Service]
ExecStart=/home/michael/bin/kube-controller-manager \
#對外服務的監聽地址,這裡表示只有本機的程式可以訪問它
–address=127.0.0.1 \
#apiserver的url
–master=http://127.0.0.1:8080 \
#服務虛擬ip範圍,同apiserver的配置
–service-cluster-ip-range=10.68.0.0/16 \
#pod的ip地址範圍
–cluster-cidr=172.20.0.0/16 \
#下面兩個表示不使用證書,用空值覆蓋預設值
–cluster-signing-cert-file= \
–cluster-signing-key-file= \

4. 部署Scheduler(主節點)

4.1 簡介

kube-scheduler負責分配排程Pod到叢集內的節點上,它監聽kube-apiserver,查詢還未分配Node的Pod,然後根據排程策略為這些Pod分配節點。我們前面講到的kubernetes的各種排程策略就是它實現的。

4.2 部署

通過系統服務方式部署

$ cp target/master-node/kube-scheduler.service /lib/systemd/system/
$ systemctl enable kube-scheduler.service
$ service kube-scheduler start
$ journalctl -f -u kube-scheduler

4.3 重點配置說明

[Unit]
Description=Kubernetes Scheduler

[Service]
ExecStart=/home/michael/bin/kube-scheduler \
#對外服務的監聽地址,這裡表示只有本機的程式可以訪問它
–address=127.0.0.1 \
#apiserver的url
–master=http://127.0.0.1:8080 \

5. 部署CalicoNode(所有節點)

5.1 簡介

Calico實現了CNI介面,是kubernetes網路方案的一種選擇,它一個純三層的資料中心網路方案(不需要Overlay),並且與OpenStack、Kubernetes、AWS、GCE等IaaS和容器平臺都有良好的整合。
Calico在每一個計算節點利用Linux Kernel實現了一個高效的vRouter來負責資料轉發,而每個vRouter通過BGP協議負責把自己上執行的workload的路由資訊像整個Calico網路內傳播——小規模部署可以直接互聯,大規模下可通過指定的BGP route reflector來完成。 這樣保證最終所有的workload之間的資料流量都是通過IP路由的方式完成互聯的。

5.2 部署

calico是通過系統服務+docker方式完成的

$ cp target/all-node/kube-calico.service /lib/systemd/system/
$ systemctl enable kube-calico.service
$ service kube-calico start
$ journalctl -f -u kube-calico

5.3 calico可用性驗證

檢視容器執行情況

$ docker ps
CONTAINER ID   IMAGE                COMMAND        CREATED ...4d371b58928b   calico/node:v2.6.2"start_runit"3 hours ago...

檢視節點執行情況

$ calicoctl node status
Calico process is running.IPv4 BGP status
+---------------+-------------------+-------+----------+-------------+| PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |+---------------+-------------------+-------+----------+-------------+|192.168.1.103| node-to-node mesh | up    |13:13:13|Established|+---------------+-------------------+-------+----------+-------------+IPv6 BGP status
NoIPv6 peers found.

檢視埠BGP 協議是通過TCP 連線來建立鄰居的,因此可以用netstat 命令驗證 BGP Peer

$ netstat -natp|grep ESTABLISHED|grep 179
tcp        00192.168.1.102:60959192.168.1.103:179       ESTABLISHED 29680/bird

檢視叢集ippool情況

$ calicoctl get ipPool -o yaml
- apiVersion: v1
  kind: ipPool
  metadata:
    cidr:172.20.0.0/16
  spec:
    nat-outgoing:true

5.4 重點配置說明

[Unit]
Description=calico node

[Service]
#以docker方式執行
ExecStart=/usr/bin/docker run –net=host –privileged –name=calico-node \
#指定etcd endpoints(這裡主要負責網路元資料一致性,確保Calico網路狀態的準確性)
-e ETCD_ENDPOINTS=http://192.168.1.102:2379 \
#網路地址範圍(同上面ControllerManager)
-e CALICO_IPV4POOL_CIDR=172.20.0.0/16 \
#映象名,為了加快大家的下載速度,映象都放到了阿里雲上
registry.cn-hangzhou.aliyuncs.com/imooc/calico-node:v2.6.2

6. 配置kubectl命令(任意節點)

6.1 簡介

kubectl是Kubernetes的命令列工具,是Kubernetes使用者和管理員必備的管理工具。
kubectl提供了大量的子命令,方便管理Kubernetes叢集中的各種功能。

6.2 初始化

使用kubectl的第一步是配置Kubernetes叢集以及認證方式,包括:

  • cluster資訊:api-server地址
  • 使用者資訊:使用者名稱、密碼或金鑰
  • Context:cluster、使用者資訊以及Namespace的組合

我們這沒有安全相關的東西,只需要設定好api-server和上下文就好啦:

#指定apiserver地址(ip替換為你自己的api-server地址)
kubectl config set-cluster kubernetes  --server=http://192.168.1.102:8080#指定設定上下文,指定cluster
kubectl config set-context kubernetes --cluster=kubernetes
#選擇預設的上下文
kubectl config use-context kubernetes

通過上面的設定最終目的是生成了一個配置檔案:~/.kube/config,當然你也可以手寫或複製一個檔案放在那,就不需要上面的命令了。

7. 配置kubelet(工作節點)

7.1 簡介

每個工作節點上都執行一個kubelet服務程序,預設監聽10250埠,接收並執行master發來的指令,管理Pod及Pod中的容器。每個kubelet程序會在API Server上註冊節點自身資訊,定期向master節點彙報節點的資源使用情況,並通過cAdvisor監控節點和容器的資源。

7.2 部署

通過系統服務方式部署,但步驟會多一些,具體如下:

#確保相關目錄存在
$ mkdir -p /var/lib/kubelet
$ mkdir -p /etc/kubernetes
$ mkdir -p /etc/cni/net.d

#複製kubelet服務配置檔案
$ cp target/worker-node/kubelet.service /lib/systemd/system/#複製kubelet依賴的配置檔案
$ cp target/worker-node/kubelet.kubeconfig /etc/kubernetes/#複製kubelet用到的cni外掛配置檔案
$ cp target/worker-node/10-calico.conf /etc/cni/net.d/

$ systemctl enable kubelet.service
$ service kubelet start
$ journalctl -f -u kubelet

7.3 重點配置說明

kubelet.service

[Unit]
Description=Kubernetes Kubelet
[Service]
#kubelet工作目錄,儲存當前節點容器,pod等資訊
WorkingDirectory=/var/lib/kubelet
ExecStart=/home/michael/bin/kubelet \
#對外服務的監聽地址
–address=192.168.1.103 \
#指定基礎容器的映象,負責建立Pod 內部共享的網路、檔案系統等,這個基礎容器非常重要:K8S每一個執行的 POD裡面必然包含這個基礎容器,如果它沒有執行起來那麼你的POD 肯定建立不了
–pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/imooc/pause-amd64:3.0 \
#訪問叢集方式的配置,如api-server地址等
–kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
#宣告cni網路外掛
–network-plugin=cni \
#cni網路配置目錄,kubelet會讀取該目錄下得網路配置
–cni-conf-dir=/etc/cni/net.d \
#指定 kubedns 的 Service IP(可以先分配,後續建立 kubedns 服務時指定該 IP),–cluster-domain 指定域名字尾,這兩個引數同時指定後才會生效
–cluster-dns=10.68.0.2 \

kubelet.kubeconfig
kubelet依賴的一個配置,格式看也是我們後面經常遇到的yaml格式,描述了kubelet訪問apiserver的方式

apiVersion: v1
clusters:
– cluster:
#跳過tls,即是kubernetes的認證
insecure-skip-tls-verify: true
#api-server地址
server: http://192.168.1.102:8080

10-calico.conf
calico作為kubernets的CNI外掛的配置

{  
  "name": "calico-k8s-network",  
  "cniVersion": "0.1.0",  
  "type": "calico",  
    <!--etcd的url-->
    "ed_endpoints": "http://192.168.1.102:2379",  
    "logevel": "info",  
    "ipam": {  
        "type": "calico-ipam"  
   },  
    "kubernetes": {  
        <!--api-server的url-->
        "k8s_api_root": "http://192.168.1.102:8080"  
    }  
}  

8. 小試牛刀

到這裡最基礎的kubernetes叢集就可以工作了。下面我們就來試試看怎麼去操作,控制它。
我們從最簡單的命令開始,嘗試一下kubernetes官方的入門教學:playground的內容。瞭解如何建立pod,deployments,以及檢視他們的資訊,深入理解他們的關係。
具體內容請看慕課網的視訊吧: 《Docker+k8s微服務容器化實踐》

9. 為叢集增加service功能 – kube-proxy(工作節點)

9.1 簡介

每臺工作節點上都應該執行一個kube-proxy服務,它監聽API server中service和endpoint的變化情況,並通過iptables等來為服務配置負載均衡,是讓我們的服務在叢集外可以被訪問到的重要方式。

9.2 部署

通過系統服務方式部署:

#確保工作目錄存在
$ mkdir -p /var/lib/kube-proxy
#複製kube-proxy服務配置檔案
$ cp target/worker-node/kube-proxy.service /lib/systemd/system/#複製kube-proxy依賴的配置檔案
$ cp target/worker-node/kube-proxy.kubeconfig /etc/kubernetes/

$ systemctl enable kube-proxy.service
$ service kube-proxy start
$ journalctl -f -u kube-proxy

9.3 重點配置說明

kube-proxy.service

[Unit]
Description=Kubernetes Kube-Proxy Server

[Service]
#工作目錄
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/home/michael/bin/kube-proxy \
#監聽地址
–bind-address=192.168.1.103 \
#依賴的配置檔案,描述了kube-proxy如何訪問api-server
–kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \

kube-proxy.kubeconfig
配置了kube-proxy如何訪問api-server,內容與kubelet雷同,不再贅述。

10. 為叢集增加dns功能 – kube-dns(app)

10.1 簡介

kube-dns為Kubernetes叢集提供命名服務,主要用來解析叢集服務名和Pod的hostname。目的是讓pod可以通過名字訪問到叢集內服務。它通過新增A記錄的方式實現名字和service的解析。普通的service會解析到service-ip。headless service會解析到pod列表。

10.2 部署

通過kubernetes應用的方式部署
kube-dns.yaml檔案基本與官方一致(除了映象名不同外)。
裡面配置了多個元件,之間使用”—“分隔

#到kubernetes-starter目錄執行命令
$ kubectl create -f target/services/kube-dns.yaml

10.3 重點配置說明

請直接參考配置檔案中的註釋。

相關推薦

()詳細手工搭建kubernetes(k8s)叢集

1. 部署ETCD(主節點)1.1 簡介kubernetes需要儲存很多東西,像它本身的節點資訊,元件資訊,還有通過kubernetes執行的pod,deployment,service等等。都需要持久化。etcd就是它的資料中心。生產環境中為了保證資料中心的高可用和資料的一

手工搭建kubernetes(k8s)1.9集群 - ()核心模塊部署

kubernetes 集群部署 環境搭建 devops 持續集成 1. 部署ETCD(主節點) 1.1 簡介 ??kubernetes需要存儲很多東西,像它本身的節點信息,組件信息,還有通過kubernetes運行的pod,deployment,service等等。都需要持久化。etcd就

[校園網]UDP繞過校園網,手工搭建

repo fst bre park ebo fan oci 校園 doc 購61E事酚7際95僖http://www.huochai.mobi/p/d/7052101 雀5挖YO糠茲1笨尚抖http://www.huochai.mobi/p/d/7052102 TFgAI牌

詳細Memcached+LAMP搭建詳解操作命令

安裝位置 第一條 連接 進行 添加數據 des auth 創建 獲取數據 簡介 Memcached是一套高性能內存對象緩存系統,用於一些高負載的Web網站,主要作用是通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的響應速度、提高可擴展性。Memcached

手工!本地K8s的建立、執行、更改原始碼、測試

可能有點懶,反正我不太喜歡實操,因為貼圖很麻煩……咳咳,這兩天接觸,就做了個教程。這個教程可以大致讓你知道執行,更改原始碼,而且從頭測試本地Kubernetes平臺叢集。 Kubernetes是個有很多貢獻者的開源大專案,理論上它作為一個不挑食的容器管理框架,可以無處不在。 不過有點可惜的是,無論實

[校園網]UDP繞過校園網,手工搭建Linux版

2018年11月20日更新~~ 時隔一年,抽空更新~ 本次更新內容: 【1】更新Softenter Server版本為2018.9月版本 【2】更新OpenVPN為2018年4月版本 【3】教程分為Cnet OS/Windows Server版本的教程,Debi

kubernetes(k8s)叢集搭建

一、概述 1.簡介 Kubernetes是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。 Kub

詳細,多圖文介紹redis叢集方式並搭建redis偽叢集

# 超詳細,多圖文介紹redis叢集方式並搭建redis偽叢集 > 超多圖文,對新手友好度極好。敲命令的過程中,難免會敲錯,但為了截好一張合適的圖,一旦出現一點問題,為了好的演示效果,就要從頭開始敲。且看且珍惜。 再認識redis叢集前,若想先知道redis單機版的可檢視,[springboot

詳細!如何搭建國際版我的世界伺服器

**關鍵詞**: 我的世界 Minecraft 伺服器 1.16 國際版 ## 前言 我是一個老MC划水員,為了和好朋友遠端聯機玩MC,我嘗試過很多辦法。網易代理MC以後,年少無知的我以為MC迎來了春天,結果網易版不僅特性頻出,而且遠端聯機和租賃服十分卡頓,最終把我演走了。不久前,我通過學習與摸索,成功

Redis 詳細的手動搭建Cluster叢集步驟

# 功能概述 ​ Redis Cluster是Redis的自帶的官方分散式解決方案,提供資料分片、高可用功能,在3.0版本正式推出。 ​ 使用Redis Cluster能解決負載均衡的問題,內部採用雜湊分片規則: ​ 基礎架構圖如下所示: ![image-20210401200112675](http

Kubernetes(K8S)叢集在centos7.4下建立

自己在搭Kubernetes(K8S)叢集下遇到的坑寫一點隨筆。 本次採用192.168.60.21,192.168.60.22,192.168.60.23作為需要裝的伺服器。 master需要安裝etcd, flannel,docker, kubernetes   192.168.6

Kubernetes(K8S)叢集管理Docker容器(部署篇)

今天這篇文章教給大家如何快速部署一套Kubernetes叢集。K8S叢集部署有幾種方式:kubeadm、minikube和二進位制包。前兩者屬於自動部署,簡化部署操作,我們這裡強烈推薦初學者使用二進位制

二進位制安裝Kubernetes(K8s)叢集---從零安裝教程

一、K8s介紹 1、K8s簡介 (1)使用Kubernetes,你可以快速高效地響應客戶需求: 動態地對應用進行擴容。 無縫地釋出新特性。 僅使用需要的資源以優化硬體使用。 (2)Kubernetes是: 簡潔的:輕量級,簡單,易上手

Kubernetes(K8S)叢集管理Docker容器

一、架構拓撲圖 二、環境規劃 角色 IP 元件 master 172.25.77.1 etcd kube-apiserver kube-

【從零開始/親測國內外均可】基於阿里雲Ubuntu的kubernetes(k8s)主從節點分散式叢集搭建——分步詳細攻略v1.11.3【準備工作篇】

從零開始搭建k8s叢集——香港節點無牆篇【大陸節點有牆的安裝方法我會在每一步操作的時候提醒大家的注意,並告訴大家如何操作】 由於容器技術的火爆,現在使用K8s開展服務變得越來越廣泛了。 本攻略是基於阿里雲主機搭建的一個單主節點和單從節點的最簡k8s分散式叢集。 為了製作

三分鐘學會用SpringMVC搭建最小系統(詳細

springmvc+mybatis dubbo+zookeeper restful redis分布式緩存 kafka 前言做 Java Web 開發的你,一定聽說過SpringMVC的大名,作為現在運用最廣泛的Java框架,它到目前為止依然保持著強大的活力和廣泛的用戶群。本文介紹如何用ecli

Linux下Hadoop2.7.1集群環境的搭建詳細版)

目錄 hdfs cp命令 manage war 替代 share logs hadoop 本文旨在提供最基本的,可以用於在生產環境進行Hadoop、HDFS分布式環境的搭建,對自己是個總結和整理,也能方便新人學習使用。 一、基礎環境 在Linux上安裝Hadoop之前

搭建nfs文件服務器——詳細

服務器、服務、nfsnfs就是Network File System的縮寫nfs的功能是可以通過網絡,讓不同的機器、不同的操作系統可以共享彼此的文件。所以可以將它看做是一個文件服務器。這個nfs服務器可以讓pc將網絡中的nfs服務器共享的目錄掛載到本地端的文件系統中,那這個遠程主機的目錄就好像是自己的一個磁盤

Qt中C++項目發布為dll的方法(詳細步驟)

exe 程序 con ostream address 只需要 include free windows 眾所周知,我們可以將C++項目中的類以及函數導出,形成 .dll 文件,以供其他程序使用,下面將說明Qt環境下的使用方法。 首先創建共享庫,步驟如下:

Tomcat集群搭建詳細(apache+mod_jk+tomcat)

detect orm 這一 parallel fault nsh 軟件包 .so 信息 TOMCAT集群 目錄 TOMCAT集群 1 1 集群 1 1.1 什麽是集群 1 1.2 集群的特性 1 1.3 集群的分類 1 1.4 TOMCAT集群配置的優缺點 2 1.5 AP