天天看點

kubernetes1.8.1安裝指南,離線安裝,内網安裝

使用kubeadm部署k8s叢集

三步裝 叢集:[離線包位址](https://market.aliyun.com/products/56014009/cmxz022571.html#sku=yuncode1657100000)

基礎環境

關閉swap
swapoff -a      

再把/etc/fstab檔案中帶有swap的行删了,沒有就無視

裝這兩工具如果沒裝的話
yum install -y ebtables socat      
IPv4 iptables 鍊設定 CNI插件需要
sysctl net.bridge.bridge-nf-call-iptables=1      

牆外安裝

在國内是很難使用這種方式安裝了,推薦檢視離線安裝的方案

裝docker
yum install -y docker
 systemctl enable docker && systemctl start docker      
裝kubeadm kubectl kubelet
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
 [kubernetes]
 name=Kubernetes
 baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
 enabled=1
 gpgcheck=1
 repo_gpgcheck=1
 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
 https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
 EOF
 setenforce 0
 yum install -y kubelet kubeadm kubectl
 systemctl enable kubelet && systemctl start kubelet
      
關閉SElinux
setenforce 0

cat <<EOF > /etc/sysctl.d/k8s.conf
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 EOF
 sysctl --system      

然後與離線安裝啟動master無異, kubeadm init

離線安裝

福利,我已經把所有依賴的鏡像,二進制檔案,配置檔案都打成了包,解決您所有依賴,花了很多時間整理這個,放在了阿裡雲市場上,希望大家給點小支援

[離線包位址賞我一杯咖啡](https://market.aliyun.com/products/56014009/cmxz022571.html#sku=yuncode1657100000)

這包裡面把大部分操作都寫在簡單的腳本裡面了,在master節點執行 init-master.sh 在node節點執行init-node.sh 安裝dashboard執行init-dashboard.sh。

然後就可以在node節點執行master輸出出來的join指令了。包的最大價值在于沒有任何依賴了,再也不用通路不了國外某網而頭疼了。

安裝kubelet服務,和kubeadm

下載下傳bin檔案 [位址](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v181)

把下載下傳好的kubelet kubectl kubeadm 直接拷貝到/usr/bin下面

配置kubelet systemd服務
cat <<EOF > /etc/systemd/system/kubelet.service
 [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=http://kubernetes.io/docs/ [Service] ExecStart=/usr/bin/kubelet
 Restart=always
 StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target
 EOF



 cat <<EOF > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
 [Service] Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true" Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin" Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local" Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt" Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0" Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs" Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki" ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS
 EOF

 這裡需要主意的是要看一下docker的cgroup driver與 --cgroup-driver要一緻。 可以用 docker info |grep Cgroup 檢視,有可能是systemd 或者 cgroupfs      
增加主機名解析

為了防止無法解析主機名,修改/etc/hosts把主機名與ip的映射寫上

啟動master節點

這裡得把google的一票鏡像想辦法弄下來,然而我已經打成了一個[tar包](https://market.aliyun.com/products/56014009/cmxz022571.html#sku=yuncode1657100000)

kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version v1.8.0 --skip-preflight-checks      
  • –pod-network-cidr 參數安裝calico網絡時需要
  • –kubernetes-version 不加的話會去請求公網查詢版本資訊
  • –skip-preflight-checks 解決一個kubelet目錄不空的小bug

看到這些輸出時你便成功了:

To start using your cluster, you need to run (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:
 http://kubernetes.io/docs/admin/addons/ You can now join any number of machines by running the following on each node
 as root:

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>      

照着執行:

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

安裝calico網絡

kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml      

join node節點

同樣到node節點安裝kubelet和kubeadm,和master節點操作一樣,不再贅述。

然後執行master節點init輸出的那個指令:

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>      

執行完成後在master節點用kubectl驗證節點是否健康

[root@dev-86-202 ~]# kubectl get nodes
 NAME STATUS ROLES AGE VERSION
 dev-86-202 NotReady master 17h v1.8.1      

注意,master節點預設是不作為node的,也不推薦做node節點。 如果需要把master當node:

[root@dev-86-202 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-      

安裝dashboard

安裝dashboard不難,使用時還真有點繞,主要是RBAC, 先介紹個簡單的

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml      

安裝完之後, 使用nodeport方式通路

kubectl -n kube-system edit service kubernetes-dashboard      

把type: ClusterIP 改成 type: NodePort 然後儲存

$ kubectl -n kube-system get service kubernetes-dashboard
 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
 kubernetes-dashboard 10.100.124.90 <nodes> 443:31707/TCP 21h      

https://masterip:31707 就可以通路dashboard了, 然而 。。 還不能用。

建立一個 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


kubectl create -f dashboard-admin.yaml      

然後在界面上直接點skip就可以了,不過你懂的,這很不安全。 真正安全的做法 請關注我進一步讨論:https://github.com/fanux

常見問題

kubelet服務啟動不了

cgroup driver配置要相同

檢視docker cgroup driver:

docker info|grep Cgroup      

有systemd和cgroupfs兩種,把kubelet service配置改成與docker一緻

vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

KUBELET_CGROUP_ARGS=–cgroup-driver=cgroupfs #這個配置與docker改成一緻

節點not ready ?

建議安裝calico網絡,如果要把主節點當成node節點需要加個指令:

[root@dev-86-202 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-      
dashboard 通路不了?

如果是NodePort方式通路,那需要知道dashboard服務具體排程到哪個節點上去了。通路那個節點的ip而不是master的ip。

不行的話把https 改成http試試。

檢視具體在哪個節點

kubectl get pod -n kube-system -o wide      
拉取鏡像失敗?

可以把node節點與master節點的鏡像都在每個節點load一下。

dashboard crash, dns起不來?
192.168網段與calico網段沖突?

如果你恰好也是192.168網段,那麼建議修改一下calico的網段

這樣init

kubeadm init --pod-network-cidr=192.168.122.0/24 --kubernetes-version v1.8.1      

修改calico.yaml

- name: FELIX_DEFAULTENDPOINTTOHOSTACTION
 value: "ACCEPT" # Configure the IP Pool from which Pod IPs will be chosen. - name: CALICO_IPV4POOL_CIDR
 value: "192.168.122.0/24" - name: CALICO_IPV4POOL_IPIP
 value: "always" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT
 value: "false"      

本文轉自kubernetes中文社群-

kubernetes1.8.1安裝指南,離線安裝,内網安裝