在 Ubuntu 上安裝 K8S教程


在 Ubuntu 上安裝 K8S教程

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