在 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
上面命令,安裝了 kubelet
、kubeadm
、kubectl
,kubelet
是 k8s 相關服務,kubectl
是 k8s
管理客戶端,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
訪問方法
這里不再贅述,詳細請參考網路資料。
方法三:直接暴露端口(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。