opensuse 15.2 安裝Kubernetes


簡介

opensuse 15.2正式更新后對於開發者而言最大的興趣應該就是Kubernetes 成為本次發行的官方收錄套件,這將意味着在opensuse中安裝Kubernetes 將變得非常簡單,下面介紹安裝過程。

安裝前准備

系統准備

  • 准備一台或多台計算機或虛擬機
  • 安裝opensuse請參考另一篇文章

禁用swap

> 禁用swap有兩種方式,一種臨時的,但重啟電腦后將失效,一種永久禁用。
>
> **虛擬機中禁用swap只能使用臨時,暫未找到原因。**
  1. 不重啟電腦,禁用啟用swap,立刻生效

    # 禁用命令
    sudo swapoff -a
    
    # 啟用命令
    sudo swapon -a
    
    # 查看交換分區的狀態
    sudo free -m
    
  2. 重新啟動電腦,永久禁用swap

    # 把根目錄文件系統設為可讀寫
    sudo mount -n -o remount,rw /
    
    # 用vi修改/etc/fstab文件,在swap分區這行前加 # 禁用掉,保存退出
    sudo vi /etc/fstab
    i      #進入insert 插入模式
    :wq   #保存退出
    
    # 重新啟動電腦,使用free -m查看分區狀態
    sudo reboot
    sudo free -m
    

安裝DOCKER

> opensuse官方源中已經收錄了大部分開發需要使用的包,docker也在其中,可直接進行安裝。
# 安裝docker
sudo zypper install docker

# 配置自啟
sudo systemctl enable docker

# 啟動docker
sudo systemctl start docker

# 驗證是否啟動成功

sudo docker ps

添加aliyundocker倉庫加速器

# 編輯daemon.json
sudo vi /etc/docker daemon.json

# 將配置添加進
{
	"registry-mirrors": ["https://ovj8fg0z.mirror.aliyuncs.com"]
}

# 重啟docker服務
sudo systemctl daemon-reload
sudo systemctl restart docker

安裝k8s

安裝kubectl,kubelet,kubeadm

因opensuse 15.2官方源中已經添加了這些包,可直接進行安裝。

# 安裝 kubernetes-kubeadm 時將自動安裝 kubernetes-kubelet 的依賴
sudo zypper install kubernetes-kubeadm kubernetes-client

# 查看是否安裝成功
kubeadm version
kubectl version

# 配置 kubelete 開機自啟
sudo systemctl enable kubelet

初始化k8s

接下來將初始化k8s服務

sudo kubeadm init --kubernetes-version=1.18.0  \
--apiserver-advertise-address=192.168.100.142   \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.244.0.0/16 \

由於kubeadm 默認從官網k8s.grc.io下載所需鏡像,國內無法訪問,因此需要通過–image-repository指定阿里雲鏡像倉庫地址,很多新手初次部署都卡在此環節無法進行后續配置。

apiserver-advertise-address為mster主機ip,需要修改為自己的主機ip。

pod-network-cidr是自定義的pod的網段

如發生SystemVerification錯誤時可加上--ignore-preflight-errors=SystemVerification重新執行。

如果初始化失敗了,自行百度解決,然后執行reset重新初始化:

kubeadm reset

進行初始化成功后返回如下信息:

.....
.....
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

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 192.168.122.21:6443 --token v2r5a4.veazy2xhzetpktfz \
    --discovery-token-ca-cert-hash sha256:daded8514c8350f7c238204979039ff9884d5b595ca950ba8bbce80724fd65d4

記錄生成的最后一部分內容,此內容在配置worker節點時需要用到。
根據提示配置kubectl

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

執行以下命令,使kubectl可以自動補充

[root@master01 ~]# source <(kubectl completion bash)

查看node 及pod 狀態

[root@master01 ~]# kubectl get node
NAME                STATUS     ROLES    AGE     VERSION
master01.paas.com   NotReady   master   2m29s   v1.18.0
[root@master01 ~]# kubectl get pod --all-namespaces
NAMESPACE     NAME                                        READY   STATUS    RESTARTS   AGE
kube-system   coredns-7ff77c879f-fsj9l                    0/1     Pending   0          2m12s
kube-system   coredns-7ff77c879f-q5ll2                    0/1     Pending   0          2m12s
kube-system   etcd-master01.paas.com                      1/1     Running   0          2m22s
kube-system   kube-apiserver-master01.paas.com            1/1     Running   0          2m22s
kube-system   kube-controller-manager-master01.paas.com   1/1     Running   0          2m22s
kube-system   kube-proxy-th472                            1/1     Running   0          2m12s
kube-system   kube-scheduler-master01.paas.com            1/1     Running   0          2m22s
[root@master01 ~]#

節點未就緒,因為coredns pod沒有啟動, 缺少相關的網絡插件。

添加網絡插件

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

如果執行失敗且錯誤為raw.githoursercontent.com無法訪問,可瀏覽器訪問下載或自行創建粘貼。

vi kube-flannel.yml
kubectl appl -f  kube-flannel.yml

也可配置其他網絡插件,如: calicoweaveCNI bridge ...

設置master節點也可以運行Pod

kubernetes官方默認策略是worker節點運行Pod,master節點不運行Pod。如果只是為了開發或者其他目的而需要部署單節點集群,可以通過以下的命令設置:

kubectl taint nodes --all node-role.kubernetes.io/master-

安裝Dashboard

安裝Kubernetes-Dashboard

官方部署儀表板的服務沒使用nodeport,將yaml文件下載到本地,在service里添加nodeport

wget  https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml

如果此方式無法下載可通過瀏覽器訪問自行創建

# 編輯文件
vim recommended.yaml

# ------------------------
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort		#新增
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000	#新增
  selector:
    k8s-app: kubernetes-dashboard
    
# 部署Dashboard    
kubectl create -f recommended.yaml

創建完成后,檢查相關服務運行狀態

kubectl get deployment kubernetes-dashboard -n kube-system

kubectl get pods -n kube-system -o wide

kubectl get services -n kube-system

netstat -ntlp|grep 30001

在瀏覽器中訪問Dashboard

創建token

kubectl create serviceaccount  dashboard-admin -n kube-system
kubectl create clusterrolebinding  dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

配置Dashboard 用戶名密碼登錄

  1. 創建用戶名文件

    # 編輯
    sudo vi /etc/kubernetes/pki/basic_auth_file
    
    # 增加內容
    admin,admin,1
    
  2. 修改kube-apiserver.yaml文件

    # 編輯
    sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
    
    # 增加一行
    ......
    - --basic-auth-file=/etc/kubernetes/pki/basic_auth_file
    
  3. 創建集群角色權限綁定關系

    # 創建綁定關系
    kubectl create clusterrolebinding  login-on-dashboard-with-cluster-admin  --clusterrole=cluster-admin --user=admin
    
    # 檢查綁定關系
    kubectl get clusterrolebinding login-on-dashboard-with-cluster-admin
    
  4. 修改Dashboardrecommended.yml文件

    args:
      - --auto-generate-certificates
      - --namespace=kubernetes-dashboard
      - --token-ttl=21600 #新增行 單位秒
      - --authentication-mode=basic #新增行
    
  5. 更新Dashboard

     kubectl apply -f recommended.yaml
    

等候Dashboard重啟完畢,此時就可以用用戶名密碼進行登錄了。

配置 Ingress-nginx

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.40.2/deploy/static/provider/cloud/deploy.yaml

遇到的問題

pod中無法訪問外網

在node節點執行

cat /var/run/flannel/subnet.env

iptables -t nat -I POSTROUTING -s 10.122.0.1/24 -j MASQUERADE


免責聲明!

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



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