在 Ubuntu 上安裝 K8S教程

在 Ubuntu 上安裝 K8S教程

1,更新系統源

若是系統自己自帶得鏡像地址,服務器在國外,下載速度會很慢,能夠打開 /etc/apt/sources.lis 替換爲國內得鏡像源。nginx

apt upgrade

2,更新軟件包

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

apt update

3,安裝 Docker

也能夠參考其它過程安裝

apt-get install docker.io

若是須要配置爲開機啓動,可執行如下命令github

systemcd enable docker

systemcd start docker

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

示例docker

{
    "registry-mirrors": [

        "https://registry.docker-cn.com"

    ]

}

重啓 Docker,使配置生效shell

sudo systemctl daemon-reload

sudo systemctl restart docker

4,安裝 K8S

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

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

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

kubeadm init

若是安裝時,出現下面狀況,說明系統得鏡像源中,找不到 k8s 的軟件包。c#

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。

相關文章
相關標籤/搜索