Kubernetes安裝部署Master/及拆除/常用命令

[官網]
插件
1、修改本地/etc/hosts文件
#將以下內容追加(>>)到 /etc/hosts文件

cat <<EOF >> /etc/hosts
172.26.48.4    k8s-master
172.26.48.5    k8s-node1
172.26.135.94  k8s-node2
EOF

2、CentOS 7 配置國內阿里雲鏡像源
#將以下內容替換(>)到 /etc/yum.repos.d/kubernetes.repo文件

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

注:如果上邊這個源不好用,再用下面的鏡像源

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

3、關閉 SELinux,目的爲了允許容器能夠與本機文件系統交互。

setenforce 0

setenforce: SELinux is disabled

systemctl daemon-reload

4、修改網絡開啓橋接網絡支持,只針對(RHEL/CentOS 7)系統

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

5、關閉swap——不關閉配置節點或是配置master都會有問題

swapoff -a

6、安裝 ebtables ethtool,否則後邊執行 kubeadm init 的時候會報錯

yum install ebtables ethtool -y

#然後修改當前內核狀態 這個文件是在 Docker安裝成功後纔出現的

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

7、安裝kubelet、kubeadm、kubectl

yum install -y kubelet kubeadm kubectl
  • 7.1、按版本安裝執行如下命令
    yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2
    7.2、按版本安裝如若報錯需要運行如下命令(1.13以下包括1.13在安裝網絡插件推薦flannel用0.10版本)
    yum install -y kubelet-1.13.0 kubeadm-1.13.0 kubectl-1.13.0 kubernetes-cni-0.6.0
# 查看k8s問題節點日誌
[root@k8s-master deploy]# journalctl -f -u kubelet

啓動

systemctl enable kubelet && systemctl start kubelet

8、鏡像準備
kubernetes 服務啓動依賴很多鏡像,但是這些鏡像要是在國內沒有(fan qiang)的話,是下載不下來的。這裏我們可以去 Docker Hub 下載指定版本的鏡像替代,下載完成後,通過 docker tag … 命令修改成指定名稱的鏡像即可。

kubeadm config images list

I0524 22:03:10.774681 19610 version.go:96] could not fetch a
Kubernetes version from the internet: unable to get URL
“https://dl.k8s.io/release/stable-1.txt”: Get
https://dl.k8s.io/release/stable-1.txt: net/http: request canceled
while waiting for connection (Client.Timeout exceeded while awaiting
headers) I0524 22:03:10.774766 19610 version.go:97] falling back to
the local client version: v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
k8s.gcr.io/kube-controller-manager:v1.14.2
k8s.gcr.io/kube-scheduler:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.3.10 k8s.gcr.io/coredns:1.3.1

9、創建文件setup_image.sh 編寫腳本批量下載鏡像,並修改鏡像tag與google的k8s鏡像名稱一致

#!/bin/bash
# 定義鏡像集合數組
images=(
    kube-apiserver:v1.14.2
    kube-controller-manager:v1.14.2
    kube-scheduler:v1.14.2
    kube-proxy:v1.14.2
    pause:3.1
    etcd:3.3.10
)
# 循環從國內Docker鏡像庫 https://hub.docker.com 中下載鏡像
for img in ${images[@]};
do
    # 從國內源下載鏡像
    docker pull mirrorgooglecontainers/$img
    # 改變鏡像名稱
    docker tag  mirrorgooglecontainers/$img k8s.gcr.io/$img
    # 刪除源始鏡像
    docker rmi  mirrorgooglecontainers/$img
    #
    echo '================'
done

# 有一個在Docker Hub中找不到,換個下載倉庫
docker pull coredns/coredns:1.3.1
docker tag  coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker rmi  coredns/coredns:1.3.1

10、kubeadm 常用命令

# 啓動一個 Kubernetes 主節點
[root@k8s-master deploy]# kubeadm init
# 啓動一個 Kubernetes 工作節點並且將其加入到集羣
[root@k8s-master deploy]# kubeadm join
# 更新一個 Kubernetes 集羣到新版本
[root@k8s-master deploy]# kubeadm upgrade
# 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集羣,您需要對集羣做一些配置以便使用 kubeadm upgrade 命令
[root@k8s-master deploy]# kubeadm config
# 管理 kubeadm join 使用的令牌
[root@k8s-master deploy]# kubeadm token
# 重新生成鏈接 Token
[root@k8s-master deploy]# kubeadm token create --print-join-command
# 查看未失效的 Token列表
[root@k8s-master deploy]# kubeadm token list
# 還原 kubeadm init 或者 kubeadm join 對主機所做的任何更改
[root@k8s-master deploy]# kubeadm reset
# 查詢所有 pod
[root@k8s-master deploy]# kubectl get pod -A -o wide
# 查詢所有節點
[root@k8s-master deploy]# kubectl get nodes -o wide
# 查看k8s問題節點日誌
[root@k8s-master deploy]# journalctl -f -u kubelet
# 查看命名空間
[root@k8s-master deploy]# kubectl get namespace
# 查看集羣狀態
/home/tidb/tidb-ansible/resources/bin/pd-ctl -u "http://192.168.1.34:2379" -d store
/home/tidb/tidb-ansible/resources/bin/pd-ctl -u "http://192.168.1.48:2379" -d member

11、初始化 master (正常情況)
kubeadm init --pod-network-cidr=<pod網絡IP地址/子網掩碼> --kubernetes-version=<k8s版本>

kubeadm init  --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.14.2
Your Kubernetes control-plane 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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.26.48.4:6443 --token yx9yza.rcb08m1giup70y63 \
    --discovery-token-ca-cert-hash sha256:f6548aa3508014ac5dab129231b54f5085f37fe8e6fc5d362f787be70a1a8a6e
[root@k8s-master deploy]#

注:執行下面的命令的意思是,給相應的用戶kuberctl執行權限,如果其他用戶需要權限的話,需要在其他用戶下再次運行以下命令

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

如果其他用戶沒有權限使用kubectl會報以下的錯誤:

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

11.1、初始化master出現的錯誤情況

[root@alimaster k8s]# kubeadm init  --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.14.2
[init] Using Kubernetes version: v1.14.2
[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
        [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.0-beta5. Latest validated version: 18.09
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

以上是因爲cup核數不夠,如果測試用可以忽略

kubeadm init  --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.14.2 --ignore-preflight-errors=NumCPU

12、好了初始化 Master 完成後,我們使用命令 kubectl get node 查看集羣節點信息,但是你會發現並沒有出現 Node 信息,反而報錯如下:

[root@k8s-master deploy]# kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?

13、出現以上原因是沒有執行init中日誌提示的那一步

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

[root@k8s-master deploy]# kubectl get node
NAME         STATUS     ROLES    AGE    VERSION
k8s-master   NotReady   master   9m8s   v1.14.2
[root@k8s-master deploy]#
[root@k8s-master deploy]# kubectl get pod -A
NAMESPACE     NAME                      READY   STATUS    RESTARTS   AGE
kube-system   coredns-fb8b8dccf-8xbcf   0/1     Pending   0          10s
kube-system   coredns-fb8b8dccf-ztxxg   0/1     Pending   0          10s
kube-system   kube-proxy-kcvph          1/1     Running   0          9s
[root@k8s-master deploy]#

14、安裝 pod 網絡附加組件
kubernetes 提供了很多種網絡組件選擇,有 Calia、Canal、Flannel、Kube-router、Romana、Weave Net 可以使用,具體使用可以參考 (3/4)安裝pod網絡 來操作,這裏我們選擇 Flannel 作爲網絡組件。
注意: 爲了使Flannel正常工作,執行kubeadm init命令時需要增加–pod-network-cidr=10.244.0.0/16參數。Flannel適用於amd64,arm,arm64和ppc64le上工作,但使用除amd64平臺得其他平臺,你必須手動下載並替換amd64。
[官網]也可使用Calico網絡插件
flannel-rbac
Flannel網絡(flannel倉庫地址)
可指定相應的網絡組件
1、如果k8s是1.13版本的則需要用以下的命令安裝flannel
以下pull鏡像指定版本0.10而kubectl apply使用flannel/v0.11.0的.yml是因爲配置文件中封裝引用的是flannel0.10的鏡像。
注:k8s1.13 kubectl apply使用flannel/v0.10.0是無法生效的

docker pull quay.io/coreos/flannel:v0.10.0-amd64
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/k8s-manifests/kube-flannel-rbac.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/kube-flannel.yml

1.2、1.14版本可用以下命令執行

# 查看當前系統的發行版信息
[root@k8s-master deploy]# lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.5.1804 (Core)
Release:        7.5.1804
Codename:       Core
[root@k8s-master deploy]#
[root@k8s-master deploy]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
[root@k8s-master deploy]#
[root@k8s-master deploy]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[root@k8s-master deploy]#
# 需要等待一小會兒,在查看運行狀態就都是 Running 了
[root@k8s-master deploy]# kubectl get pod -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-fb8b8dccf-8xbcf              1/1     Running   0          2m8s
kube-system   coredns-fb8b8dccf-ztxxg              1/1     Running   0          2m8s
kube-system   etcd-k8s-master                      1/1     Running   0          81s
kube-system   kube-apiserver-k8s-master            1/1     Running   0          81s
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          74s
kube-system   kube-flannel-ds-amd64-hk4wt          1/1     Running   0          51s
kube-system   kube-proxy-kcvph                     1/1     Running   0          2m7s
kube-system   kube-scheduler-k8s-master            1/1     Running   0          69s
[root@k8s-master deploy]#

15、最後一步禁用kubernetes源
enabled=1 改爲0(0禁用/1開啓源)

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

拆除

要撤消什麼kubeadm做,你應該先排出節點,並確保該節點將其關閉之前是空的。
使用適當的憑證與控制平面節點通信,請運行:

kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
kubectl delete node <node name>

然後,在要刪除的節點上,重置所有kubeadm安裝狀態:

kubeadm reset

reset之後提示以下信息

[reset] Deleting contents of stateful directories: [/var/lib/etcd /var/lib/kubelet /var/lib/dockershim /var/run/kubernetes /var/lib/cni]

The reset process does not clean CNI configuration. To do so, you must remove /etc/cni/net.d

The reset process does not reset or clean up iptables rules or IPVS tables.
If you wish to reset iptables, you must do so manually by using the "iptables" command.

If your cluster was setup to utilize IPVS, run ipvsadm --clear (or similar)
to reset your system's IPVS tables.

The reset process does not clean your kubeconfig files and you must remove them manually.
Please, check the contents of the $HOME/.kube/config file.

重置過程不會重置或清除iptables規則或IPVS表。如果您希望重置iptables,則必須手動進行:

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

如果要重置IPVS表,則必須運行以下命令:

ipvsadm -C

如果您想重新開始,只需運行kubeadm init或kubeadm join使用適當的參數即可。

刪除乾淨k8s

systemctl stop kubelet
yum remove -y kubelet kubeadm kubectl kubernetes-cni

modprobe -r ipip
#Linux lsmod命令用於顯示已載入系統的模塊。
lsmod

Module:模塊的名稱。 這通常是模塊文件的名稱,減去擴展名(.o或.ko),但它可能有一個自定義名稱,可以在使用insmod命令插入模塊時將其指定爲選項。
Size:駐留模塊使用的內存量,以字節爲單位。
Used by:此列包含一個數字,表示正在使用的模塊實例數。 如果該數字爲零,則當前未使用該模塊。 數字後面的文本表示有關使用模塊的內容的任何可用信息:這通常是設備名稱,文件系統標識符或另一個模塊的名稱。

rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd

再次安裝k8s1.13版本

yum install -y kubelet-1.13.0 kubeadm-1.13.0 kubectl-1.13.0 kubernetes-cni-0.6.0

安裝k8s1.13版本要重啓服務器



關閉swap

swapoff -a
swapon -a

永久關閉swap

sed -ri 's/.*swap.*/#&/' /etc/fstab
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章