在 Ubuntu 上安裝 K8S教程


引用網址:https://cloud.tencent.com/developer/article/1817826

在 Ubuntu 上安裝 K8S教程

目錄

  • 在 Ubuntu 上安裝 K8S教程
    • 1,更新系統源
    • 2,更新軟件包
    • 3,安裝 Docker
    • 也可以參考其它過程安裝
    • 4,安裝 K8S
    • 5,初始化
    • 6,使主節點生效
    • 7,查看 Node
    • 8,安裝面板
    • 9,訪問面板(dashboard)
    • 10,添加 Node 進行測試

1,更新系統源

如果系統本身自帶得鏡像地址,服務器在國外,下載速度會很慢,可以打開 /etc/apt/sources.lis 替換為國內得鏡像源。

apt upgrade

2,更新軟件包

將系統得軟件組件更新至最新穩定版本。

apt update

3,安裝 Docker

也可以參考其它過程安裝

apt-get install docker.io

如果需要配置為開機啟動,可執行以下命令

systemcd enable docker

systemcd start docker

如果要配置 Docker 鏡像加速,打開 /etc/docker/daemon.json 文件,registry-mirrors 增加或修改,加入https://registry.docker-cn.com 這個地址,也可以填寫阿里雲騰訊雲等鏡像加速地址。

示例

{
	"registry-mirrors": [ "https://registry.docker-cn.com" ] }

重啟 Docker,使配置生效

sudo systemctl daemon-reload

sudo systemctl restart docker

4,安裝 K8S

執行以下命令安裝 https 工具以及 k8s。

apt-get update && apt-get install -y apt-transport-https curl apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated

執行下面命令測試是否正常

kubeadm init

如果安裝時,出現下面情況,說明系統得鏡像源中,找不到 k8s 的軟件包。

No apt package "kubeadm", but there is a snap with that name. Try "snap install kubeadm" No apt package "kubectl", but there is a snap with that name. Try "snap install kubectl" No apt package "kubelet", but there is a snap with that name. Try "snap install kubelet"

可以打開 /etc/apt/sources.list 文件,添加一行

deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

再次執行安裝 K8s 的命令。

如果出現

The following signatures couldn't be verified because the public key is not available

則執行下面命令,為期添加 key。

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add 

上面命令,安裝了 kubeletkubeadmkubectlkubelet 是 k8s 相關服務,kubectlk8s 管理客戶端,kubeadm 是部署工具。

5,初始化

執行下面命令進行初始化,會自動從網絡中下載需要的 Docker 鏡像。

此命令是用來部署主節點的(Master)。

執行 kubeadm version 查看版本,GitVersion:"v1.17.2" 中即為版本號。

執行以下命令初始化

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

--ignore-preflight-errors=NumCPU 是在只有一個 CPU 的時候使用,例如 1G1M 的學生服務器。

但是因為需要連接到 Google ,所以可能無法下載內容。

我們可以通過使用 kubeadm config images list 命令,列舉需要拉取的鏡像。我們來手動通過 Docker 拉取。這個過程比較麻煩,還需要手動修改鏡像名稱。

拉取方法 docker pull {鏡像名稱}

Google 訪問不了,不過 DockerHub 已經備份好需要的鏡像。

mirrorgooglecontainers 這個倉庫備份了相應的鏡像。遺憾的是,鏡像不一定都是最新的備份。阿里雲上面的 google_containers 倉庫應該是備份最新的。

例如需要以下鏡像

k8s.gcr.io/kube-apiserver:v1.17.2 k8s.gcr.io/kube-controller-manager:v1.17.2 k8s.gcr.io/kube-scheduler:v1.17.2 k8s.gcr.io/kube-proxy:v1.17.2 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.5

則拉取對應的鏡像

docker pull mirrorgooglecontainers/kube-apiserver:v1.17.2 docker pull mirrorgooglecontainers/kube-controller-manager:v1.17.2 docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0 docker pull mirrorgooglecontainers/kube-proxy:v1.17.2 docker pull mirrorgooglecontainers/pause:3.1 docker pull mirrorgooglecontainers/etcd:3.4.3-0 docker pull coredns/coredns:1.6.5

使用 docker tag {舊名稱:版本}:{新名稱:版本} ,將鏡像改名。

考慮到各種情況和可能會出現問題,筆者這里給出一個別人寫的一鍵腳本,可以直接一鍵完成這一步。

touch pullk8s.sh	# 創建腳本文件
nano pullk8s.sh		# 編輯腳本

然后將以下內容復制進去

for  i  in `kubeadm config images list`; do imageName=${i#k8s.gcr.io/} docker pull registry.aliyuncs.com/google_containers/$imageName docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.aliyuncs.com/google_containers/$imageName done;

保存文件

Ctrl + O 回車鍵 Ctrl + x

給腳本文件賦權限

chmod +x pullk8s.sh

執行腳本

sh pullk8s.sh

然后執行 docker images 命令查看需要的鏡像是否都准備好了。

root@instance-wxxixh4k:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE k8s.gcr.io/kube-proxy v1.17.2 cba2a99699bd 2 weeks ago 116MB k8s.gcr.io/kube-apiserver v1.17.2 41ef50a5f06a 2 weeks ago 171MB k8s.gcr.io/kube-controller-manager v1.17.2 da5fd66c4068 2 weeks ago 161MB k8s.gcr.io/kube-scheduler v1.17.2 f52d4c527ef2 2 weeks ago 94.4MB k8s.gcr.io/coredns 1.6.5 70f311871ae1 3 months ago 41.6MB k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 3 months ago 288MB k8s.gcr.io/pause 3.1 da86e6ba6ca1 2 years ago 742kB

最后執行 開頭的初始化命令。

實在不行的話,可以嘗試 https://learnku.com/articles/29209 中的安裝教程。

6,使主節點生效

添加環境變量

export KUBECONFIG=/etc/kubernetes/admin.conf

添加網絡插件

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

運行別人編寫好的 yaml 配置文件

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

這一步也可以自己編寫 yaml 。

執行后出現

odsecuritypolicy.policy/psp.flannel.unprivileged created clusterrole.rbac.authorization.k8s.io/flannel created clusterrolebinding.rbac.authorization.k8s.io/flannel created serviceaccount/flannel created configmap/kube-flannel-cfg created daemonset.apps/kube-flannel-ds-amd64 created daemonset.apps/kube-flannel-ds-arm64 created daemonset.apps/kube-flannel-ds-arm created daemonset.apps/kube-flannel-ds-ppc64le created daemonset.apps/kube-flannel-ds-s390x created

保存使用配置

kubeadm join

7,查看 Node

執行以下命令查看 Node

kubectl get nodes

結果示例

root@instance-wxxixh4k:~# kubectl get nodes NAME STATUS ROLES AGE VERSION instance-wxxixh4k Ready master 9m23s v1.17.2

說明已經成功了,並且能夠添加移除 Node。

8,安裝面板

下載 yaml 配置文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/alternative/kubernetes-dashboard.yaml

使用 cat kubernetes-dashboard.yaml 命令查看 yaml 文件內容,記錄版本號。

文件中有類型以下內容的語句,后面的數字就是版本號。

 image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

拉取 kubernetes-dashboard 鏡像(注意修改后面的版本號)。

docker pull registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 docker tag registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 docker rmi registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1

安裝 kubernetes-dashboard

kubectl create -f kubernetes-dashboard.yaml

查看安裝結果

kubectl get pod --namespace=kube-system

配置面板,添加 Admin 賬號和權限

復制粘貼下面內容到終端,按回車鍵。

cat <<EOF > dashboard-admin.yaml apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system EOF

上面代碼會創建一個 dashboard-admin.yaml 文件。

執行安裝

kubectl create -f dashboard-admin.yaml

查看節點端口

kubectl get svc --namespace=kube-system

找到名為 kubernetes-dashboard 的節點,記錄端口 。

查看 pod 名稱

kubectl get pod --namespace=kube-system

其中有一個 kubernetes-dashboard 開頭的,例如 kubernetes-dashboard-6bf999dbcc-nc4hq,記錄名稱。

9,訪問面板(dashboard)

如果以下方法無法使用,請參考

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

方法一:kubectl proxy

執行

kubectl proxy

內網即可使用下面地址訪問

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

方法二:API Server

訪問方法

https://{master-ip}:{apiserver-port}/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

這里不再贅述,詳細請參考網路資料。

方法三:直接暴露端口(NodePort)

不推薦使用。

執行

kubectl -n kube-system edit service kubernetes-dashboard

找到 type: ClusterIP,改成 type: NodePort

另外 port 也可以改一下。

提示:

進入時,先使用方向鍵盤移動到合適位置;刪除字符請使用 Delete 鍵;

然后按一下 Esc 鍵,按下 i 鍵進入編輯;

按一下 Esc 鍵,按一下 Shift + q,會提示輸入內容,輸入 wq! 保存並退出。

執行 kubectl -n kube-system get service kubernetes-dashboard 查看到端口映射。

例如

 80:31901/TCP

則訪問方法是 https://{ip}:31901

方法三

kubectl port-forward kubernetes-dashboard-6bf999dbcc-nc4hq 8080:80 --namespace=kube-system &

10,添加 Node 進行測試

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=8090 --type=NodePort

外網訪問 8090 即可訪問到 Nginx。


免責聲明!

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



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