4. 完整版Ubuntu k8s 集群搭建及采坑記錄(k8s 連載)


一. 安裝virtualBox

    虛擬機需要安裝兩台. 一個是master, 一個是node. 這兩台虛擬機的名字一定不能相同. 因此, master服務器的名字叫做ubantu, node的名字叫ubantu-node

  1. 安裝ubantu系統

  2. 設置

    • 設置橋接模式

    • 設置root密碼

sudo passwd root

 

   先輸入用戶密碼, 然后在輸入root密碼

  

    • 設置 root ssh 訪問 

網絡不通, 重啟電腦, 以root用戶登錄, 密碼:123456

ping www.baidu.com 能ping通

設置ssh

更新apt-get
apt-get update 
安裝ssh
apt-get install ssh
設置ssh
vim /etc/ssh/sshd_config
將PermitRootLogin 的值設置為yes

  

 

重啟ssh 

 systemctl restart ssh

 

查看ip地址: ip a

在mac的terminal通過ssh連接到服務: ssh root@192.168.1.103, 輸入用戶密碼. 連接成功

    • 關閉防火牆

      ufw disable

       

 二. 在虛擬機上安裝docker

1. 登錄服務器, 查看ip

 

   2. 在mac終端ssh登錄

ssh root@192.168.1.103
密碼: 123456

  3. 安裝docker

apt-get update
apt-get install -y docker.io

  檢驗docker是否安裝成功. 命令行輸入docker檢查

  4. docker的配置

  • 阿里雲加速器配置 : https://cr.console.aliyun.com/
  • 登錄https://cr.console.aliyun.com/, 並找到鏡像加速器, 參考教程,進行配置

     

     

    第一步: 創建文件夾, 有就不用創建了
    sudo mkdir -p /etc/docker
    第二步:添加文件, 並將大括號的內容添加到文件里
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://w52p8twk.mirror.aliyuncs.com"]
    }
    EOF
    
    第三步: 重啟docker
    sudo systemctl daemon-reload
    sudo systemctl restart docker

     

三. 在docker上安裝mysql 

第一步: 在master節點上, 安裝myqsl鏡像

docker pull mysql:5.6

第二步: 啟動mysql容器

docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d  mysql:5.6

-e MYSQL_ROOT_PASSWORD: -e是用來設置環境變量的. 這里設置的是mysql的root用戶的密碼
-v : 掛載卷
 

 第三步: 阿里雲倉庫的登錄

1. 創建一個自己的鏡像倉庫

 

 

 2. 點擊管理按鈕, 可以查看登錄阿里雲鏡像倉庫的操作方法

 

 

四.安裝k8s

科學&上網: 安裝k8s,需要FQ, 其實一直不明白,啥事科學&上網,原來科學&上網的含義就是FQ. 因為安裝k8s的軟件, 需要FQ下載一些東西. 

 

前提:

1. 兩台主機上都安裝了docker

2.  兩台主機上都要安裝kubeadm, kubelet, 和kubectl

3. 兩台主機都要禁用虛擬內存

 

第一步:禁用虛擬內存並永久關閉

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

 為什么禁用虛擬內存呢?

原因是kubeadm安裝k8s的時候, 它在init的時候回去檢測是否有虛擬分區有沒有關閉, 如果你開啟了虛擬內存,我們的容器, pod就有可能放在虛擬內存中, 這樣會大大降低工作效率

 

如果是安裝的linux操作系統, 需要關閉SELinux

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

 

第二步: 安裝kubeadm, kubelet, 和kubectl

安裝apt-transport-https 和 curl
apt-get update && apt-get install -y apt-transport-https curl

第三步: 如何設置代理

下載k8s的軟件, 需要設置代理, 我使用的是v2&ray. 

1. copy 代理參數

 

 然后粘貼出來: export http_proxy="http://127.0.0.1:8001"; export HTTP_PROXY="http://127.0.0.1:8001"; export https_proxy="http://127.0.0.1:8001"; export HTTPS_PROXY="http://127.0.0.1:8001"

2. 查看mac本機的ip

ifconfig | grep 182.168.1

 

 網關是101

3. 給虛擬機設置代理

export http_proxy="http://192.168.1.101:8001"; export HTTP_PROXY="http://192.168.1.101:8001"; export https_proxy="http://192.168.1.101:8001"; export HTTPS_PROXY="http://192.168.1.101:8001"

 

 

4. 檢查代理是否設置成功

echo $http_proxy

 

 

第四步: 把官方的下載源, 加入到apt-get中

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 


cat <<EOF>/etc/apt/sources.list.d/kubernates.list
deb
http://apt.kubernates.io/kubernates-xenial main
EOF

 

拆解步驟一: 

我直接運行 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -  報錯, 

分兩步執行: 

1. 在瀏覽器輸入網址下載 apt-key.gpg :  

curl -O https://packages.cloud.google.com/apt/doc/apt-key.gpg 

2. 將文件導入到虛擬機, 使用apt-key命令加載獲取到的文件

sudo apt-key add apt-key.gpg(成功后回顯OK)

 

 

 

拆解步驟二: 

將源加到文件當中

cat <<EOF >/etc/apt/sources.list.d/kubernates.list 
deb http://apt.kubernates.io/ kubernates-xenial main
EOF

實際上是將一行文字放到了Kubernetes.list文件中. 

我們查看一下這個文件

vi /etc/apt/sources.list.d/kubernates.list 

我們看到已經有了

 

 第五步: 下載kubelet kubeadm kubectl

apt-get update && apt-get install -y kubelet kubeadm kebuctl

-------------華麗的分割線--開始------------

在這里重點備注::::::重點:::::重點:::::重點::::::

科學&上網搞死人------整了好多天, 每次都死在這里. 

可以使用國內鏡像. 重要的事情說三遍

可以使用國內鏡像.

可以使用國內鏡像.

可以使用國內鏡像.

 參考這篇文章: 

Kubernetes國內鏡像、下載安裝包和拉取gcr.io鏡像: https://blog.csdn.net/nklinsirui/article/details/80581286

 

Kubernets國內鏡像
阿里雲提供了Kubernetes國內鏡像來安裝kubelet、kubectl 和 kubeadm。

登陸阿里雲鏡像網站:https://opsx.alibaba.com/mirror

查找關鍵字“kubernetes”,點擊【幫助】按鈕。

————————————————
Debian / Ubuntu
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
apt-get update && apt-get install -y apt-transport-https
curl https:
//mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF
apt
-get update
apt
-get install -y kubelet kubeadm kubectl ———————————————— CentOS / RHEL / Fedora 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 setenforce 0 yum install -y kubelet kubeadm kubectl systemctl enable kubelet && systemctl start kubelet ————————————————

 前面五個步驟, 參考這里分割線內部即可

-------------華麗的分割線--結束------------

 

第六步: 禁止組件更新

apt-mark hold kubelet kubeadm kubectl

 

第七步: 初始化master 

 1. 禁用虛擬內存

swapoff -a

2. 初始化kubeadm

kubeadm init --pod-network-cidr=10.244.0.0/16

 

  直接運行會報錯, 要求是2cpu,我們是1cpu, 如果想要忽略,需要加上一個參數--ignore-preflight-errors=NumCPU

kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

執行結果:

  

我們看到,在初始化下載鏡像的時候, 有部分組件下載失敗了.
我們記錄下來這些下載失敗的組件

error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.18.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.18.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.18.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.18.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.4.3-0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.6.7: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1

然后通過如下方法, 重新下載:

1. 可以從keveon或者mirrorgooglecontainer或者阿里雲鏡像庫中下載, 當其中一個鏡像庫找不到時, 嘗試另一個 2. 在手工設置tag

使用下面三組命令:

docker pull mirrorgooglecontainers/$imageName
docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName
docker rmi mirrorgooglecontainers/$imageName 

下面我們來一個一個下載

 

1). 下載docker pull mirrorgooglecontainers/kube-apiserver:v1.18.

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2

 

拉取鏡像參考文章(說的很詳細):  國內拉取google kubernetes鏡像https://blog.csdn.net/networken/article/details/84571373

我最終使用的是阿里雲鏡像, 找到鏡像詳情頁面, 可以復制地址

 

 2). 修改下載下來的鏡像的tag為k8s.gcr.io的

docker tag  registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2 k8s.gcr.io/kube-apiserver:v1.18.2

 

3). 刪除阿里雲鏡像

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2

 

4) 所有其他的鏡像都這么操作, 一共7個

 

# 拉取鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-proxy:v1.18.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-controller-manager:v1.18.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-scheduler:v1.18.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/coredns:1.6.7

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/etcd:3.4.3-0

-------------------------------------- #修改tag

docker tag  registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-proxy:v1.18.2 k8s.gcr.io/kube-proxy:v1.18.2

docker tag  registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2 k8s.gcr.io/kube-apiserver:v1.18.2

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-controller-manager:v1.18.2 k8s.gcr.io/kube-controller-manager:v1.18.2

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-scheduler:v1.18.2 k8s.gcr.io/kube-scheduler:v1.18.2

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2 k8s.gcr.io/pause:3.2

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0


---------------------------------- # 刪除鏡像

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-proxy:v1.18.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-controller-manager:v1.18.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-scheduler:v1.18.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/coredns:1.6.7

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/etcd:3.4.3-0

 

 

 

 效果如下:

 

 

 3. 重新執行初始化, 並記錄最后生成的kubeadm join命令

kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

記錄生成的kubeadm join命令

kubeadm join 192.168.1.109:6443 --token ehtgdn.c7cjv35rqp45it25 \
--discovery-token-ca-cert-hash sha256:2f6192bc28397d1bbd00922538a9588345c37f890e7c8ace5d22585fa1922464

kubeadm join 192.168.1.106:6443 --token vezzap.0w213k8ms11a0v51 \
    --discovery-token-ca-cert-hash sha256:4fcac7c487209d7c354351ba6f93110253df4d0440fc68cb23fc4ac0baed4e0c

 

為什么要記錄呢? 后面我們可以吧生成的kubeadm join記錄下來, 然后后面在節點上執行一下, 就表示這個節點加入了k8s集群

 

此條kubeadm init操作完成以下步驟:

1> 准備工作,檢查主機配置是否符合要求等

2> 下載相關鏡像  (其實是我們提前准備好的)

3>  啟動kubelet,配置對應的配置文件,

    為各個組件生成證書,放在/etc/kubernetes/pki/ 目錄

    核心組件配置文件,放在/etc/kubernetes/manifests 目錄下 (靜態pod生命周期與pod一致,可以通過yaml或者http方式創建)

4> kubeadm的配置文件保存,上報各種接口和信息給k8s master    

5> 生成 token,node申請加入集群時授權,啟用基於角色的訪問控制

6> 安裝兩個重要組件,coredns,kube-proxy。 7> 提示安裝完成,提示使用准備命令。    

 

 

 4. 執行下面三個命令

1. mkdir -p $HOME/.kube
2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
3.   

 

 

第八步: 安裝網絡插件(只在master上執行)

sysctl net.bridge.bridge-nf-call-iptables=1

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

把文件下載到本地

 

第二個命令我在命令行執行連接超時. 直接在網頁打開(需要FQ). 

# Ubuntu安裝rzsz
sudo apt-get install lrzsz
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: flannel
rules:
  - apiGroups:
      - ""
    resources:
      - pods
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs:
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - nodes/status
    verbs:
      - patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: flannel
  namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
  labels:
    tier: node
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-system
  labels:
    tier: node
    app: flannel
spec:
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      hostNetwork: true
      nodeSelector:
        beta.kubernetes.io/arch: amd64
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      serviceAccountName: flannel
      initContainers:
      - name: install-cni
        image: quay.io/coreos/flannel:v0.10.0-amd64
        command:
        - cp
        args:
        - -f
        - /etc/kube-flannel/cni-conf.json
        - /etc/cni/net.d/10-flannel.conflist
        volumeMounts:
        - name: cni
          mountPath: /etc/cni/net.d
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.10.0-amd64
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
          limits:
            cpu: "100m"
            memory: "50Mi"
        securityContext:
          privileged: true
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        volumeMounts:
        - name: run
          mountPath: /run
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      volumes:
        - name: run
          hostPath:
            path: /run
        - name: cni
          hostPath:
            path: /etc/cni/net.d
        - name: flannel-cfg
          configMap:
            name: kube-flannel-cfg
View Code

然后保存到本地.

 修改kube-flannel.yml文件, 增加下圖中紅色的部分

 

 將這個文件改完放在根目錄~下

 

 

執行命令, 應用到kubeadm

kubectl apply -f kube-flannel.yml

查看當前master的狀態

kubectl get node

 

 如果不是ready狀態, 查看日志, 看原因

journalctl -f -u kubelet.service

比如, 沒有安裝網絡插件

 

 

遇到的問題error:

1、error: unable to recognize “mycronjob.yml”: no matches for kind “CronJob” in version “batch/v2alpha1”
去kube-apiserver.yaml文件中添加: - --runtime-config=batch/v2alpha1=true,然后重啟kubelet服務,就可以了

下面是具體操作:

cd /etc/kubenetes/manifest

vi kube-apiserver.yaml

 

 重啟

這個問題是參考了下面這兩篇文章解決的

參考文章:

1. https://blog.csdn.net/qq_34857250/article/details/82562514   第六條

2. https://www.cnblogs.com/aaroncnblogs/articles/8901173.html 在后面的位置,包括重啟kubectl

 

 2. no matches for kind "DaemonSet" in version "extensions/v1beta1"

這個問題是參考這篇文章解決的. 按照它上面說的操作:https://blog.csdn.net/wangmiaoyan/article/details/101216496

 

 第九步:添加node

1. 將之前記錄下來的kubeadm join 命令執行
2. 禁用虛擬內存 swapoff -a
3. sysctl net.bridge.bridge-nf-call-iptables=1

1. 將之前記錄下來的kubeadm join命令執行

kubeadm join 192.168.1.109:6443 --token ehtgdn.c7cjv35rqp45it25     --discovery-token-ca-cert-hash sha256:2f6192bc28397d1bbd00922538a9588345c37f890e7c8ace5d22585fa1922464

 

 

2. 禁用虛擬內存 swapoff -a

3. 執行sysctl net.bridge.bridge-nf-call-iptables=1

4. 檢查node是否ready

在master上進行檢查

kubectl get node

 

 

 

都是NotReady, 下面我們來處理NotReady的問題

5. 檢查所有pod是否正常

kubectl get pod --all-namespaces -o wide
如果有pod處於非running狀態, 則查看該pod, 
kubectl describe pod *** -n kube-system,
有可能是鏡像無法下載導致鏡像啟動失敗, 如果是, 手動在node上pull image, 然后在master上刪掉對應的pod,
k8s會自動重新調度pod, 刪除pod命令:
kubectl delete pod *** -n kube-system

 

現在coredns-66bff467f8-8dntc是Pending狀態, 非Running狀態. 我們來處理一下

a) 查看該pod 

kubectl describe pod kube-proxy-lcqjv -n kube-system

 

 

 從錯誤原因可以看出, 需要pause:3.2鏡像, 但是沒有.

b) 在node節點上, 拉取鏡像

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2
docker tag  registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2 k8s.gcr.io/pause:3.2
docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2

c) 在master節點上刪除kube-proxy-lcqjv這個pod, 然后讓他重新調度

kubectl delete pod kube-proxy-lcqjv -n kube-system

 

 刪除后, 重新查看發現還是有pod是ContainerCreating狀態, 繼續按照上面的方法, 查看. 直到這些pod都running為止

 

 

查詢節點狀態

kubectl get node

 

 node是Ready的狀態, 但是....master依然是notReady

處理master的NotReady狀態

查看節點日志: 

journalctl -f -u kubelet.service

 

 

 備注: 處理pod都是pending狀態, 參考文章: https://blog.csdn.net/wangmiaoyan/article/details/101216496

  

第十步: k8s安裝異常處理

1. 在node上執行kubeadm reset 可以斷開node, 然后重新join

2. 在master上執行kubeadm reset后可以重新init

ERROR1 : 執行kubeadm reset后, 會遇到這個問題ERROR

Unable to connect to the server: x509: certificate signed by unknown authority

問題描述: 

昨天按照教程搭建了一個集群,今天想重新實驗下,於是執行kubeadm reset命令清除集群所有的配置。

接着按照部署的常規流程執行kubeadm init --kubernetes-version=v1.14.3 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=0.0.0.0命令創
建集群。然后執行以下幾個命令: mkdir
-p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 接着當我執行kubectl get nodes等命令時,所有的命令都會打印出錯誤: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”) 當在這些 kubectl 命令后加入 --insecure-skip-tls-verify 參數時,就會報如下錯誤:error: You must be logged in to the server (Unauthorized)

我記得reset完成的時候, 給了一個提示,如下: 

 

 沒有手動刪除~/.kube/config配置文件. 而我重新執行了init初始化以后, 沒有再次執行這三句話, 因為里面有下面的這個文件

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

於是, 把關注點放在config這個配置的第二句話上

 

 首先. 看了cd /etc/kubernetes目錄, 發現admin.conf的創建時間是5月1號

然后,看了cd ~/.kube目錄, 發現config的創建時間是4月30號. 很顯然不是最新的. 

於是, 執行了sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 和sudo chown $(id -u):$(id -g) $HOME/.kube/config

在執行kubectl get nodes, 可以正常顯示了.

 

3. 重新啟動后, 要執行如下命令

0. ufw disable
1.swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 
2. systemctl daemon-reload // 重新讀取本地配置文件
3. systemctl restart kubelet
設置開機自啟 systemctl enable kubelet

 

 


 

頭疼的問題: 從單位回到家, 網絡的ip地址變了

1. 修改配置文件

2. 將網絡換成靜態ip 

參考文章: https://blog.csdn.net/whywhy0716/article/details/92658111


 

 

 

 

參考文章: 

1. k8s 集群部署問題整理: https://blog.csdn.net/qq_34857250/article/details/82562514 

2. https://www.cnblogs.com/aaroncnblogs/articles/8901173.html

3. https://blog.csdn.net/wangmiaoyan/article/details/101216496

 

 


免責聲明!

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



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