k8s的kubeadm安裝


前言:

  上一篇轉載的博客介紹了二進制包的安裝方法,和容器的安裝方式相比,二進制包還是相對繁瑣的,很多的配置文件需要手動修改,本篇博客將介紹如何使用docker來進行k8s的安裝。

 

192.168.181.131 master
192.168.181.130 node1

1.安裝前的准備

!!!以下操作需要在所有master和node上執行

關閉selinux,關閉防火牆

 

將兩台主機的主機名修改為如上所示,並在/etc/hosts上建立相應的映射

關閉swap
swap的作用類似Windows系統下的“虛擬內存”

查看

free -g

# 永久關閉swap分區

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

master與node創建密鑰並互信
參考:https://blog.csdn.net/allensandy/article/details/101473338

驗證(互相能夠免密登錄)


安裝同步時鍾

 yum install -y ntpdate

ntpdate time.windows.com

內核調整,將橋接的IPv4流量傳遞到iptables的鏈

配置系統內核參數使流過網橋的流量也進入iptables/netfilter框架中

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

sysctl -p

安裝kubernetes和docker的yum源:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
 
name=Kubernetes repo
 
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
 
gpgcheck=0
 
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
 
enabled=1

EOF


wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d/

安裝docker  kubelet  kubeadm  kubelectl

yum install docker kubelet kubeadm kubectl -y

配置國內鏡像並開啟docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://dlbpv56y.mirror.aliyuncs.com"]
}
EOF

systemctl enable docker && systemctl start docker

開啟kublet

systemctl enable kubelet && systemctl start kubelet

以下操作分節點功能實施!!!

2.在master節點上啟動集群。

kubeadm init \
--apiserver-advertise-address=192.168.181.131 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.4 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
 
請耐心等1-2分鍾直到結束
IP當然是master的IP,需要注意的是版本號,我借鑒的文章是1.16.0,我執行的時候報錯提示為1.17.4,修改了之后啟動成功。

參數介紹:

–apiserver-bind-port int32 Default: 6443 可以通過這個參數指定API-server的工作端口,默認是6443。
–config string 可以通過這個命令傳入kubeadm的配置文件,需要注意的是,這個參數是實驗性質的,不推薦使用。
–dry-run 帶了這個參數后,運行命令將會把kubeadm做的事情輸出到標准輸出,但是不會實際部署任何東西。強烈推薦!
-h, --help 輸出幫助文檔。
–node-name string 指定當前節點的名稱。
–pod-network-cidr string 通過這個值來設定pod網絡的IP地址網段;設置了這個值以后,控制平面會自動給每個節點設置CIDRs(無類別域間路由,Classless Inter-Domain Routing)。
–service-cidr string Default: “10.96.0.0/12” 設置service的CIDRs,默認為 10.96.0.0/12。
–service-dns-domain string Default: “cluster.local” 設置域名稱后綴,默認為cluster.local。
其他參數。

 

kubeadm-init的工作流

在運行了 kubeadm init 命令以后,都進行了那些操作呢?這里主要就是跟着官方文檔來翻譯一遍了:

首先會運行一系列預檢代碼來檢查系統的狀態;大部分的檢查只會拋出一個警告,也有一部分會拋出異常錯誤從而導致工作流推出(比如沒有關閉swap或者沒有安裝docker)。官方給出一個參數–ignore-preflight-errors=, 我估計八成大家用不到,除非真的明白自己在做啥。。。
生成一個用來認證k8s組件間調用的自簽名的CA(Certificate Authority,證書授權);這個證書也可以通過–cert-dir(默認是/etc/kubernetets/pki)的方式傳入,那么這一步就會跳過。
把kubelet、controller-manager和scheduler等組件的配置文件寫到/etc/kubernets/目錄,這幾個組件會使用這些配置文件來連接API-server的服務;除了上面幾個配置文件,還會生成一個管理相關的admin.conf文件。
如果參數中包含–feature-gates=DynamicKubeletConfig,會把kubelet的初始化配置文件寫入/var/lib/kubelet/config/init/kubelet這個文件;官方給出一坨文字解釋,這里先不探究了,因為我沒有用到。。。
接下來就是創建一些 靜態pod 的配置文件了,包括API-server、controller-manager和scheduler。假如沒有提供外部etcd,還會另外生成一個etcd的靜態Pod配置文件。這些靜態pod會被寫入/etc/kubernetes/manifests,kubelet進程會監控這個目錄,從而創建相關的pod。
假如第五步比較順利,這個時候k8s的控制面進程(api-server、controller-manager、scheduler)就全都起來了。
如果傳入了參數–feature-gates=DynamicKubeletConfig,又會對kubelet進行一坨操作,因為沒有用到,所以這里不做詳細探究。
給當前的節點(Master節點)打label和taints,從而防止其他的負載在這個節點運行。
生成token,其他節點如果想加入當前節點(Master)所在的k8s集群,會用到這個token。
進行一些允許節點以 Bootstrap Tokens) 和 TLS bootstrapping 方式加入集群的必要的操作:
設置RBAC規則,同時創建一個用於節點加入集群的ConfigMap(包含了加入集群需要的所有信息)。
讓Bootstrap Tokens可以訪問CSR簽名的API。
給新的CSR請求配置自動認證機制。
通過API-server安裝DNS服務器(1.11版本后默認為CoreDNS,早期版本默認為kube-dns)和kube-proxy插件。這里需要注意的是,DNS服務器只有在安裝了CNI(flannel或calico)之后才會真正部署,否則會處於掛起(pending)狀態。
到這里基本上就告一段落了

 

3. node節點的加入:使用上面生成好的token直接在node節點上執行就號好了:

 

 

這個token24小時后會失效,如果后面有其他節點要加入的話,處理方法:

kubeadm token create
[root@master ~]# kubeadm token create
0w3a92.ijgba9ia0e3scicg
 
 
 
[root@master ~]# kubeadm token list
TOKEN                     TTL       EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
0w3a92.ijgba9ia0e3scicg   23h       2019-09-08T22:02:40+08:00   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
t0ehj8.k4ef3gq0icr3etl0   22h       2019-09-08T20:58:34+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
 
 
[root@k8s-master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
ce07a7f5b259961884c55e3ff8784b1eda6f8b5931e6fa2ab0b30b6a4234c09a
 
然后加入集群
kubeadm join 192.168.10.11:6443 --token yhns57.4s3y2yll21ew8mta \
    --discovery-token-ca-cert-hash sha256:ce07a7f5b259961884c55e3ff8784b1eda6f8b5931e6fa2ab0b30b6a4234c09a

4.安裝網絡插件:

在master上執行:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

這樣的話,master與node都會在ready狀態了。

[root@master ~]#  kubectl exec -n kube-system weave-net-h2x7w -c weave -- /home/weave/weave --local status
 
        Version: 2.5.2 (up to date; next check at 2019/10/09 14:32:36)
 
        Service: router
       Protocol: weave 1..2
           Name: 5a:8f:40:d9:92:59(node2)
     Encryption: disabled
  PeerDiscovery: enabled
        Targets: 3
    Connections: 3 (2 established, 1 failed)
          Peers: 3 (with 6 established connections)
 TrustedSubnets: none
 
        Service: ipam
         Status: ready
          Range: 10.32.0.0/12
  DefaultSubnet: 10.32.0.0/12

5.測試集群,測試代碼來自另一篇博文,應用者需要做修改:

[root@master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
 
[root@master ~]#  kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposedservice/nginx exposed
 
[root@master ~]#  kubectl get pods,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-86c57db685-gbs8f   1/1     Running   0          2m28s
 
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        147m
service/nginx        NodePort    10.99.194.238   <none>        80:30560/TCP   26s

 

補充一點:

k8s集群的離線環境初始化命令:

sudo kubeadm init --kubernetes-version=v1.13.3 --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=10.21.244.3 --image-repository=my.registry:5000/google_containers

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM