雲主機搭建Kubernetes 1.10集群

来源:https://www.cnblogs.com/aubin/archive/2018/07/09/9284633.html
-Advertisement-
Play Games

一、基礎環境 雲主機 下載軟體包 將所有軟體下載至 目錄 master到node做免密認證 設定主機名與host文件 解決DNS解析localhost 此雲主機的DNS解析localhost會解析到一個鬼地址,這是個大坑。kubeadm初始化是會用到localhost。如果你的主機能解析到自己的IP ...


一、基礎環境

雲主機

下載軟體包

將所有軟體下載至/data目錄

# 鏈接:https://pan.baidu.com/s/13DlR1akNBCjib5VFaIjGTQ 密碼:1l69

master到node做免密認證

ssh-keygen
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

設定主機名與host文件

# 分別設定node與master的主機名
hostnamectl set-hostname master
exec bash

# 同步所有主機的hosts文件
vim /etc/hosts
192.168.1.78 master localhost
192.168.1.237 node1
192.168.1.100 node2
192.168.1.188 node3

解決DNS解析localhost

此雲主機的DNS解析localhost會解析到一個鬼地址,這是個大坑。kubeadm初始化是會用到localhost。如果你的主機能解析到自己的IP,那麼這步可以跳過。如果不能則需要自己搭建一個DNS,將localhost解析到自己。

# 1.檢測
[root@node2 ~]# nslookup localhost
Server:     118.118.118.9
Address:    118.118.118.9#53

Non-authoritative answer:
Name:   localhost.openstacklocal
Address: 183.136.168.91

# 2.搭建DNS
yum -y install dnsmasq
cp /etc/resolv.conf{,.bak}
rm -rf /etc/resolv.conf
echo -e "nameserver 127.0.0.1\nnameserver $(hostname -i)" >> /etc/resolv.conf
chmod 444 /etc/resolv.conf
chattr +i /etc/resolv.conf
echo -e "server=8.8.8.8\nserver=8.8.4.4" > /etc/dnsmasq.conf
echo -e "$(hostname -i)\tlocalhost.$(hostname -d)" >> /etc/hosts
service dnsmasq restart

# 3.再次檢測
[root@master ~]# nslookup localhost
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   localhost
Address: 192.168.1.78

同步系統時間

ntpdate 0.centos.pool.ntp.org

關閉防火牆

iptables -F
systemctl stop firewalld
systemctl disable firewalld

關閉SELinux & 關閉swap

swapoff -a 
sed -i 's/.*swap.*/#&/' /etc/fstab
setenforce 0

確認時區

timedatectl set-timezone Asia/Shanghai 
systemctl restart chronyd.service 

修改系統參數

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

安裝docker

tar -xvf docker-packages.tar
cd docker-packages
yum -y install local *.rpm
systemctl start docker && systemctl enable docker

配置鏡像加速器

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://lw9sjwma.mirror.aliyuncs.com"]
}

systemctl daemon-reload 
systemctl restart docker

配置k8s的yum源

vim /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0

獲取kube軟體包

cd kube-packages-1.10.1                 # 軟體包在網盤中下載    
tar -xvf kube-packages-1.10.1.tar
cd kube-packages-1.10.1
yum -y install local *.rpm 
systemctl start kubelet && systemctl enable kubelet

統一k8s與docker的驅動

# 1.查看docker驅動
 docker info | Cgroup Driver
Cgroup Driver: cgroupfs

# 修改k8s配置文件與docker保持一致
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

導入基礎鏡像

cd /data
docker load -i k8s-images-1.10.tar.gz 

二、初始化master節點

# 初始化master 指定的版本要與kubeadm版本一致
# kubeadm只給定了最少選項,集群名稱等等都沒有指定,kubeadm init
[root@master ~]# kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.244.0.0/16

# 初始化完成後得到如下信息

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

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

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

  kubeadm join 192.168.1.78:6443 --token qabol0.c2gq0uyfxvpqr8bu --discovery-token-ca-cert-hash sha256:2237ec7b8efd5a8f68adcb04900a0b17b9df2a78675a7d62b4aef644a7f62c05
# kubeadm join 是node節點加入集群的命令,註意token的有效期

若要通過普通用戶使用群集,需要執行以下步驟

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

基本命令

# 查看pods
kubectl get pods


# 查看系統pods 
[root@master ~]# kubectl get pods -n kube-system
NAME                             READY     STATUS     RESTARTS   AGE
etcd-master                      0/1       Pending    0          1s
kube-apiserver-master            0/1       Pending    0          1s
kube-controller-manager-master   0/1       Pending    0          1s
kube-dns-86f4d74b45-d42zm        0/3       Pending    0          8h
kube-proxy-884h6                 1/1       NodeLost   0          8h
kube-scheduler-master            0/1       Pending    0          1s

# 查看集群各組件狀態信息
[root@master ~]# kubectl get componentstatuses
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"}   
You have new mail in /var/spool/mail/root

三、node加入集群

# 確保node節點cgroup驅動保持一致
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# 命令來自集群初始化之後額顯示中
kubeadm join 192.168.1.78:6443 --token v0866r.u7kvg5js1ah2u1bi --discovery-token-ca-cert-hash sha256:7b36794f4fa5121f6a5e309d0e312ded72997a88236a93ec7da3520e5aaccf0e

# master節點查看nodes信息
[root@master data]# kubectl get nodes
NAME      STATUS     ROLES     AGE       VERSION
master    NotReady      master    57m       v1.10.1
node1     NotReady      <none>    27m       v1.10.1
node2     NotReady      <none>    11s       v1.10.1
node3     NotReady   <none>    4s        v1.10.1
You have new mail in /var/spool/mail/root

四、部署網路

部署

flannel官網
flannel下載時不用科學上網,flannel的yml文件會自動去quay.io網站中下載鏡像。

# 1.1使用軟體包中的flannel,並指pod映射到哪個主機的網卡上面。
vim kube-flannel.yml
command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr","-iface=eth0" ]
# 以下要按順序創建,先創建rbac,之前沒有穿件rbac導致pod正常創建,但是pin不同
kubectl apply -f kube-flannel-rbac.yml
kubectl apply -f kube-flannel.yml
# 後,節點的狀態會變為ready
[root@master1 kubernetes1.10]# kubectl get node
NAME      STATUS    ROLES     AGE       VERSION
master    Ready      master    57m       v1.10.1
node1     Ready      <none>    27m       v1.10.1
node2     Ready      <none>    11s       v1.10.1
node3     Ready   <none>    4s        v1.10.1

# 2.從官網下載最新的flannel,k8s1.7+ 直接執行以下命令即可
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

flannel配置文件修改

kube-flannel.yml中指定使用的網段
"Network": "10.244.0.0/16"

預設使用16位掩碼,則在各node中都分配一個10.244.0.0/8的網路

五、部署dashboard

kubectl apply -f kubernetes-dashboard-http.yam
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml

命令行常用命令

# 查看pod信息,預設顯示default名稱空間下的pod
[root@master ~]# kubectl get pods
No resources found.

# 指定名稱空間寫pod
[root@master ~]# kubectl get pods -n kube-system
NAME                                    READY     STATUS    RESTARTS   AGE
etcd-master                             1/1       Running   0          3h
kube-apiserver-master                   1/1       Running   0          3h
kube-controller-manager-master          1/1       Running   0          3h
kube-dns-86f4d74b45-bzbvc               3/3       Running   0          3h
kube-flannel-ds-5ghhj                   1/1       Running   0          2h
kube-flannel-ds-ht4xd                   1/1       Running   0          3h
kube-flannel-ds-kbm5g                   1/1       Running   0          3h
kube-flannel-ds-mlj4r                   1/1       Running   0          2h
kube-proxy-9xxnd                        1/1       Running   0          3h
kube-proxy-n9w5x                        1/1       Running   0          3h
kube-proxy-nkn8c                        1/1       Running   0          2h
kube-proxy-shd6l                        1/1       Running   0          2h
kube-scheduler-master                   1/1       Running   0          3h
kubernetes-dashboard-5c469b58b8-rjfx6   1/1       Running   0          1h


# 顯示更詳細的pod信息,此時各pod中都運行了一個kube-proxy和flannel容器
-o wide 顯示更詳細的信息,報錯node節點iP、主機名
[root@master ~]# kubectl get pods -n kube-system -o wide
NAME                                    READY     STATUS    RESTARTS   AGE       IP              NODE
etcd-master                             1/1       Running   0          3h        192.168.1.78    master
kube-apiserver-master                   1/1       Running   0          3h        192.168.1.78    master
kube-controller-manager-master          1/1       Running   0          3h        192.168.1.78    master
kube-dns-86f4d74b45-bzbvc               3/3       Running   0          3h        10.244.0.2      master
kube-flannel-ds-5ghhj                   1/1       Running   0          2h        192.168.1.188   node3
kube-flannel-ds-ht4xd                   1/1       Running   0          3h        192.168.1.78    master
kube-flannel-ds-kbm5g                   1/1       Running   0          3h        192.168.1.237   node1
kube-flannel-ds-mlj4r                   1/1       Running   0          2h        192.168.1.100   node2
kube-proxy-9xxnd                        1/1       Running   0          3h        192.168.1.237   node1
kube-proxy-n9w5x                        1/1       Running   0          3h        192.168.1.78    master
kube-proxy-nkn8c                        1/1       Running   0          2h        192.168.1.100   node2
kube-proxy-shd6l                        1/1       Running   0          2h        192.168.1.188   node3
kube-scheduler-master                   1/1       Running   0          3h        192.168.1.78    master
kubernetes-dashboard-5c469b58b8-rjfx6   1/1       Running   0          1h        10.244.0.3      master

六、kubeadm清空配置

# 清空kubectl
kubeadm reset

# 清空網路信息
ip link del cni0
ip link del flannel.1

七、踩過的那些坑

  • 確保master與node的DNS解析localhost能解析到自己的IP
  • node加入master確保token不過期
  • node確保kubelet正常啟動並運行
  • flannel網路要先創建kube-flannel-rbac.ymal再創建 kube-flannel.yml

八、token過期的解決辦法

# 1.查看已經存在的token
kubeadm token list

# 2.創建token
kubeadm token create

# 3.查看ca證書的sha256編碼
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

# 4.node使用新的token加入集群
kubeadm join --token acb123 --discovery-token-ca-cert-hash sha256:efg456  172.16.6.79:6443 --skip-preflight-checks
    # abc123    新創建的Token
    # efg456    證書的sha256編碼
    # IP+Port   Master的IP+Port

感謝


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一. 聲明 該節主要介紹SignalR的一些理論知識,代碼量很小,在後續章節編寫中,會不斷回來更新該節,完善該節的介紹;待該系列結束時,該節會和目錄章節合併。 下麵的理論介紹相對枯燥,但對於後面的理解有一定意義,不感興趣的朋友可以右上角離開了,從下一節開始,正式開始擼代碼。 原計劃三天更新一篇,結果 ...
  • 轉自:https://www.cnblogs.com/qianyuliang/p/6501531.html postconf -n #別名資料庫(postalias/newaliases 命令生成) alias_database = hash:/etc/postfix/aliases #別名錶,列出 ...
  • 沒錯,又是我,這期是講解在電腦上如何安裝雙系統,雙系統我想大家都知道是什麼回事吧?就是說一臺電腦里具備兩個系統,但是只能運行其中一種系統,若想運行另一種系統,首先把現在運行的系統關閉後重啟,然後選擇進入到另外一個系統,但是兩者的本地磁碟是通用的,但是必須是文件系統格式相同才行,否則如windows與 ...
  • Iptables採用了表和鏈的分層結構,每個規則表相當於內核空間的一個容器,根據規則集的不同用途劃分為預設的四個表,raw表,mangle表,nat表,filter表,每個表容器內包括不同的規則鏈,根據處理數據包的不同時機劃分為五種鏈,而決定是否過濾或處理數據包的各種規則,按先後順序存放在各規則鏈中 ...
  • Linux 安裝Redis<單機版>(使用Mac遠程訪問) ...
  • linux 重定向及部分命令 一,重定向講解: 1> 標準輸出重定向 覆蓋原有內容 慎用!!!!!! 1>> 標準輸出追加重定向 追加內容 2> 錯誤輸出重定向 只輸出錯誤信息 2>> 錯誤輸出追加重定向 追加內容 0< 標準輸入重定向 0<< 標準輸出追加重定向 xargs 將信息進行分組命令 p ...
  • Linux 安裝Redis<準備>(使用Mac遠程訪問) ...
  • 第12章 示波器設計—DAC信號發生器的實現 本章節為大家講解二代示波器中信號發生器的實現。這個功能還是比較實用的,方便為二代示波器提供測試信號。實現了正弦波,方波和三角波的頻率,幅度以及占空比設置。 12.1 DAC的輸出阻抗和使能緩衝問題 12.2 DAC驅動實現 12.3 信號發生器配置界面設 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...