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

資訊專欄INFORMATION COLUMN

循序漸進的手動安裝k8s筆記-1

CoderDock / 3258人閱讀

摘要:日志級別通過啟動并設置為開機自啟動之后可以通過來檢查服務器運行狀態安裝服務編輯服務文件環境變量文件中定義了啟動參數。

不知道有沒有人和我一樣,在手動安裝時因為很多原因沒有成功(主要還是知識儲備不夠),被各種高可用配置和各種證書權限弄得迷迷糊糊。這個筆記是我在嘗試了很多種手動安裝Kubernetes集群教程中的方法失敗后產生的想法,希望能夠將復雜的配置化繁為簡,呈現出一個基本功能的Kubernetes程序,記錄下如何以最簡的方式配置各個組件,使其能夠實現基本的功能。然后再逐步添加多節點、安全認證、高可用等復雜配置,通過這個過程來理解Kubernetes各種基礎組件之間的關系已經配置方法。

計劃的第一步就是完成一個非安全的單 master 單 node 集群,api-server 和 kubelet 等組件都通過systemd來管理,master 上不安裝kubelet 只做管理端使用。首先我嘗試用比較新的 1.10.X 版k8s 安裝,但是安裝過程中沒有辦法用非證書認證方式指定 api-server 的地址,似乎官方在有意逐步取消對非安全方式的支持。最后還是選擇了比較舊的k8s 1.6.0 來完成安裝。

參考資料:

《Kubernetes權威指南》

運行環境&軟件版本:

Ubuntu 16.04.4 LTS

kubernetes v1.6.0

etcd v3.0.14

docker-ce 18.06.1-ce

角色規劃:
主機名 IP地址 角色 CPU/內存
u16-1 192.168.112.148 master(only as master) 2核/2G
u16-2 192.168.112.149 node 2核/2G
環境準備

從 github 的 Kubernetes 項目頁面 上找到我們需要的 V1.6.0版本,然后點擊 CHANGELOG,在 Older releases 下面點擊 CHANGELOG-1.6.md ,找到 v1.6.0 版本的 Server Binaries 中對應的架構的包(kubernetes-server-linux-amd64.tar.gz)下載并上傳到服務器(國內上網環境可能無法正常下載)

k8s 1.6.0 對應的 etcd 版本為 v3.0.14,同樣可以從 github 上 etcd 項目對應版本的頁面找到并下載到服務器

wget https://github.com/etcd-io/etcd/releases/download/v3.0.14/etcd-v3.0.14-linux-amd64.tar.gz

關閉 swap并在 /etc/fstab 文件中取消掉自動掛載

sudo swapoff -a

如果系統上安裝了SELinux,需要將其關閉。另外還需要在防火墻上放開下面步驟中所有需要使用的端口,或者關閉防火墻管理軟件,我這里選擇將ubuntu16.04默認的ufw關閉

sudo ufw disable
MASTER 節點安裝 安裝 etcd 服務
tar xf etcd-v3.0.14-linux-amd64.tar.gz
#把解壓后的 etcd 和 etcdctl 復制到 /usr/bin 目錄下
sudo cp etcd-v3.0.14-linux-amd64/etcd{,ctl} /usr/bin/

然后設置 systemd 服務文件 /lib/systemd/system/etcd.service

[Unit]
Description=Etcd Server
After=network.target

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd

[Install]
WantedBy=multi-user.target

這里 WorkingDirectory 指定的目錄需要提前創建好,這個目錄將作為etcd數據保存的目錄。

EnvironmentFile 可以指定 etcd 的配置文件。在我這里因為只是測試安裝,所以 etcd 使用默認配置就可以了。

通過 systemd 啟動 etcd 并設置為開機自啟動

sudo systemctl daemon-reload
sudo systemctl start etcd
sudo systemctl enable etcd
# 完成后可以檢查一下服務是否正常運行
systemctl status etcd
# 也可以使用 etcdctl 來檢查 etcd 健康狀況
etcdctl cluster-health
# 正常的輸出為:
# member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
# cluster is healthy
安裝 kube-apiserver 服務
tar xf kubernetes-server-linux-amd64.tar.gz
# 將 kube-apiserver、kube-controller-manager 和 kube-scheduler 的二進制文件復制到 /usr/bin 目錄下
sudo cp kubernetes/server/bin/kube-{apiserver,controller-manager,scheduler} /usr/bin/

編輯 systemd 服務文件 /lib/systemd/system/kube-apiserver.service

[Unit]
Description=Kubernetes API Server
After=etcd.service
Wants=etcd.service

[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

環境變量文件 /etc/kubernetes/apiserver 中定義了 kube-apiserver 啟動參數 KUBE_API_ARGS。我們創建這個文件并填入如下內容

KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379 
--insecure-bind-address=0.0.0.0 --insecure-port=8080 
--service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 
--admission_control=NamespaceLifecycle,LimitRanger,ServiceAccount, 
DefaultStorageClass,ResourceQuota 
--logtostderr=false --log-dir=/var/log/kubernetes --v=2"
參數說明:  
--storage-backend :指定 etcd 版本。
--etcd-servers :指定 etcd 服務器地址和端口。
--insecure-bind-address :指定 api-server 非安全方式綁定的地址。0.0.0.0 表示所有地址。
--insecure-port :指定 api-server 非安全方式啟用的端口號。
--service-cluster-ip-range :指定集群 Cluster IP 網段,如果后續需要使用網絡插件這里需要按照網絡插件要求的網段配置。
--service-node-port-range :指定集群中 Service 可以映射物理機端口號范圍
--admission_control :Kubernetes 集群的準入控制設置,各控制模塊以插件形式依次生效。
--logtostderr :指定為 false 時將錯誤日志寫入日志文件而非 標準輸出。
--log-dir :日志保存路徑。
--v :日志級別

通過 systemd 啟動 kube-apiserver 并設置為開機自啟動

sudo systemctl daemon-reload
sudo systemctl start kube-apiserver
sudo systemctl enable kube-apiserver
# 之后可以通過 status 來檢查服務器運行狀態
systemctl status kube-apiserver
安裝 kube-controller-manager 服務

編輯 systemd 服務文件 /lib/systemd/system/kube-controller-manager.service

[Unit]
Description=Kubernetes Controller Manager
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

環境變量文件 /etc/kubernetes/controller-manager 中定義了 kube-controller-manager 啟動參數 KUBE_CONTROLLER_MANAGER_ARGS。我們創建這個文件并填入如下內容

KUBE_CONTROLLER_MANAGER_ARGS="--master=http://192.168.112.148:8080 
--logtostderr=false 
--log-dir=/var/log/kubernetes 
--v=2"
參數說明:

--master :指定 API-server 的URL地址

安裝 kube-scheduler 服務

編輯 systemd 服務文件 /lib/systemd/system/kube-scheduler.service

[Unit]
Description=Kubernetes Scheduler Server
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

環境變量文件 /etc/kubernetes/scheduler 中定義了 kube-scheduler 啟動參數 KUBE_SCHEDULER_ARGS。我們創建這個文件并填入如下內容

KUBE_SCHEDULER_ARGS="--master=http://192.168.112.148:8080 
--logtostderr=false 
--log-dir=/var/log/kubernetes 
--v=2"

安裝完 kube-controller-manager 和 kube-scheduler 之后將其啟動并設置為開機自啟動

sudo systemctl daemon-reload
sudo systemctl start kube-controller-manager kube-scheduler
sudo systemctl enable kube-controller-manager kube-scheduler
# 同樣,啟動之后可以通過 systemctl status XXXX 來檢查服務的狀態
systemctl status kube-controller-manager
systemctl status kube-scheduler.service

master 上的安裝已經完成,下一步就要開始安裝 node 節點上需要的服務了。

NODE 節點安裝

node 節點上需要安裝的服務有 docker 、kubelet 和 kube-proxy。

安裝 docker-ce

安裝 docker 的方式很多,在這里我使用添加阿里云的源并使用 apt-get 安裝:

# step 1: 安裝必要的一些系統工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安裝GPG證書
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 寫入軟件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安裝 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

按裝好后 docker 就是啟動狀態并且設置了開機自啟。

安裝 kubelet
tar xf kubernetes-server-linux-amd64.tar.gz
# 將 kubelet 和 kube-proxy 的二進制文件復制到 /usr/bin 目錄下
sudo cp kubernetes/server/bin/kube{let,-proxy} /usr/bin/

編輯 systemd 服務文件 /lib/systemd/system/kubelet.service

[Unit]
Description=Kubernetes Kubelet Server
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet $KUBELET_ARGS
Restart=on-failure

[Install]
WantedBy=mulit-user.target

WorkingDirectory 指定的路徑是 kubelet 的數據目錄,需要在服務運行前創建提前創建。

環境變量文件 /etc/kubernetes/kubelet 中定義了 kubelet 啟動參數 KUBELET_ARGS。我們創建這個文件并填入如下內容

KUBELET_ARGS="--api-servers=http://192.168.112.148:8080 
--hostname-override=u16-2 
--logtostderr=false 
--log-dir=/var/log/kubernetes 
--v=2"
參數說明:

--api-servers :指定 apiserver 的URL地址。

--hostname-override :指定注冊到 apiserver 時本節點的名稱。

通過 systemd 啟動 kubelet 并設置為開機自啟動

sudo systemctl daemon-reload
sudo systemctl start kubelet
sudo systemctl enable kubelet
# 之后可以通過 status 來檢查服務器運行狀態
systemctl status kubelet
安裝 kube-proxy 服務

編輯 systemd 服務文件 /lib/systemd/system/kube-proxy.service

[Unit]
Description=Kubernetes Kube-Proxy Server
After=networking.service
Requires=networking.service

[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

環境變量文件 /etc/kubernetes/proxy 中定義了 kube-proxy 啟動參數 KUBE_PROXY_ARGS。我們創建這個文件并填入如下內容

KUBE_PROXY_ARGS="--master=http://192.168.112.148:8080 
--logtostderr=false 
--log-dir=/var/log/kubernetes 
--v=2"

通過 systemd 啟動 kubu-proxy 并設置為開機自啟動

sudo systemctl daemon-reload
sudo systemctl start kube-proxy
sudo systemctl enable kube-proxy
# 之后可以通過 status 來檢查服務器運行狀態
systemctl status kube-proxy

node 節點設置完成后, 如果 master 節點上有 kubernetes 的命令行管理軟件 kubectl ,就可以使用kubectl 查看到新增加的節點。kubectl 的二進制文件可以從 kubernetes-server-linux-amd64.tar.gz 中找到。

sudo cp kubernetes/server/bin/kubectl /usr/bin/
sudo chmod +x /usr/bin/kubectl
kubectl get node
# 輸出為
# NAME      STATUS     AGE       VERSION
# u16-2     NotReady   17m       v1.6.0

這時可以看到新增加的節點 u16-2 的狀態為 NotReady,通過命令來查看 node 狀態

kubectl describe node u16-2

這時可以在 Events: 中看到一條報錯,Massage是

Failed to start ContainerManager failed to initialise top level QOS containers: root container /kubepods doesn"t exist

解決辦法參考這里,在kubelet 的啟動參數中加上下面參數并重啟

    --cgroups-per-qos=false
    --enforce-node-allocatable=""

重啟后 node 變為 Ready 狀態。

在 Kubernetes 集群上運行服務 創建示例服務
# 在集群上運行 kubernetes-bootcamp 鏡像
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
# 因為上面命令中的鏡像位置在國內可能也無法正常訪問 所以可以將其替換為 dockerhub 上相同的鏡像 jocatalin/kubernetes-bootcamp:v1
kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
# 檢查 deployment 運行狀態
kubectl get deployment
# ---顯示如下---
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1         0         0            0           4m
# 當前的 Pod 數一直為0,檢查一下 deployment 狀態
kubectl describe deployment kubernetes-bootcamp
# Events 中最后的信息為 Scaled up replica set kubernetes-bootcamp-4025819334 to 1 ,再看一下 replicaSet 的狀態
kubectl describe replicaset kubernetes-bootcamp-4025819334

發現 Events 中的報錯:

Error creating: No API token found for service account "default", retry after the token is automatically created and added to the service account

解決方法參考這里,因為這里搭建的整個集群都是無安全認證的,所以將 api-server 中的 --admission_control 參數里的 ServiceAccount 刪除,并重啟 kube-apiserver 。

之后再次查看 deployment 狀態

kubectl get deployment
# ---顯示如下---
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1         1         1            0           18m

這次 pod 成功創建了,但仍然不是 AVAILABLE 狀態。

# 查看現有的 pod 
kubectl get pod
# ---顯示如下---
NAME                                   READY     STATUS              RESTARTS   AGE
kubernetes-bootcamp-4025819334-q61xj   0/1       ContainerCreating   0          5m
# 查看這個 Pod 的詳細信息
kubectl describe pod kubernetes-bootcamp-4025819334-q61xj
# 在Events 里看到了錯誤信息:
# Error syncing pod, skipping: failed to "CreatePodSandbox" for "kubernetes-bootcamp-4025819334-q61xj_default(1d20e7af-af48-11e8-bf2f-000c29a01556)" with CreatePodSandboxError: "CreatePodSandbox for pod "kubernetes-bootcamp-4025819334-q61xj_default(1d20e7af-af48-11e8-bf2f-000c29a01556)" failed: rpc error: code = 2 desc = unable to pull sandbox image "gcr.io/google_containers/pause-amd64:3.0": Error response from daemon: {"message":"Get https://gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"}"

根據信息可知錯誤是因為下載這個鏡像失敗:gcr.io/google_containers/pause-amd64:3.0 。還是網絡環境的問題,這時可以在 dockerhub 上找到相同的鏡像下載并修改 tag 來得到這個鏡像。

在 node 節點上執行

sudo docker image pull mirrorgooglecontainers/pause-amd64:3.0
sudo docker tag mirrorgooglecontainers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

鏡像下載好之后再次查看 deployment 狀態:

kubectl get deployment
# ---顯示如下---
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1         1         1            1           35m
在節點上暴露端口

此時服務已經部署正確,為了集群外部也能夠訪問到服務,現在需要使用 NodePort 方式將端口暴露出來。

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
kubectl get service
# ---輸出如下---
NAME                  CLUSTER-IP        EXTERNAL-IP   PORT(S)          AGE
kubernetes            169.169.0.1               443/TCP          2d
kubernetes-bootcamp   169.169.210.120          8080:10412/TCP   12m

此時 node 上的 10412 端口已經打開(這里的 10412 端口是在 kube-apiserver 啟動參數 --service-node-port-range 范圍內隨機分配的),并且在 node 本機上是可以訪問的。但是集群外部訪問就會超時,包括沒有安裝 kube-proxy 的 master 訪問也會超時。解決辦法參考這里。

為了安全起見, docker 在 1.13 版本之后,將系統iptables 中 FORWARD 鏈的默認策略設置為 DROP,并為連接到 docker0 網橋的容器添加了放行規則。

知道了原因是 docker 啟動時修改了iptables 規則后,可以修改 docker 的服務文件 /lib/systemd/system/docker.service 添加下面內容

ExecStartPost=/sbin/iptables -P FORWARD ACCEPT

含義為在啟動 docker 之后,修改 FORWARD 鏈的默認規則為 ACCEPT。配置完成之后重啟 docker 。此時外部就可以訪問了。

至此,一個單 master 單 node 的非安全 kubernets 集群已經配置完成,并且基礎功能可以正常使用。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32713.html

相關文章

  • 循序漸進手動安裝k8s筆記-2

    摘要:啟動并設置為開機自啟動安裝服務這部分配置與上一篇筆記完全相同。我們創建這個文件并填入如下內容安裝完和之后將其啟動并設置為開機自啟動以上,角色的功能已經安裝完成。 上一篇筆記中,我嘗試了使用 k8s 1.6 版本安裝一個最簡單的集群。這一次,我希望能夠增加 node 的數量并且安裝網絡插件,然后配置內部的域名解析功能。 在起初的設想中,我仍然希望不配置各個組件間的認證,只關心功能的正常運...

    pingink 評論0 收藏0
  • 快收藏!52篇25萬字,微服務、云原生、容器、K8S、Serverless精華文章集錦

    摘要:正在走遠,新年之初,小數精選過去一年閱讀量居高的技術干貨,從容器到微服務云原生,匯集成篇精華集錦,充分反映了這一年的技術熱點走向。此文值得收藏,方便隨時搜索和查看。,小數將繼續陪伴大家,為朋友們奉獻更有逼格的技術內容。 2017正在走遠,新年之初,小數精選過去一年閱讀量居高的技術干貨,從容器、K8S 到微服務、云原生、Service Mesh,匯集成52篇精華集錦,充分反映了這一年的技...

    AaronYuan 評論0 收藏0
  • k8s安裝總結

    摘要:主要在文件附加下面的源我使用的是阿里的鏡像,如果你使用的其他國內鏡像,請找對應的鏡像源然后執行下列命令,安裝軟件。參考資料只要用小朋友都能部署基本安裝基于阿里云鏡像站安裝用在上快速構建測試集群 本次安裝環境是Ubuntu16.04,其他環境下,shell命令會有一些不同,但步驟應該大致相同,默認docker已經安裝完成 下載 下載安裝下列軟件 kubelet Node上運行的節點代理...

    Nosee 評論0 收藏0
  • microk8s安裝過程中遇到幾個問題

    摘要:問題安裝過程中部分鏡像需要從的鏡像倉庫拉取但是國內無法訪問其鏡像倉庫故需要手動獲取鏡像再自行安裝從官方提供的倉庫獲取不是使用的宿主機器的進程故不能簡單的把自己獲取的鏡像重新來完成安裝需要導出之后然后使用提供的鏡像管理功能進行導入解決原理獲取 問題 microk8s安裝過程中,部分鏡像需要從google的鏡像倉庫拉取,但是國內無法訪問其鏡像倉庫, 故需要手動獲取鏡像再自行安裝(從官方提...

    DC_er 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<