環境:三個centos7html
K8s2是Master;K8s1是node1;K8s3是node2node
官方文檔:https://kubernetes.io/docs/setup/independent/install-kubeadm/git
注意:kubernetes幾乎全部的安裝組件和docker 鏡像都放在goolge本身的網站上github
安裝dockerdocker
全部節點都安裝docker:可利用docker-machine安裝;可參考:https://www.cnblogs.com/lkun/p/7655495.htmlvim
全部節點關閉swap:swapoff -a 這個若是不關閉的話在初始化集羣的時候會報錯(若是重啓機器,須要從新關閉)centos
全部節點設置內核參數:爲了支持橋接api
cat
<<EOF >
/etc/sysctl
.d
/k8s
.conf
bash
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p
全部節點 配置k8S源網絡
cat
<<EOF >
/etc/yum
.repos.d
/kubernetes
.repo
[kubernetes]
name=Kubernetes
baseurl=http:
//mirrors
.aliyun.com
/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http:
//mirrors
.aliyun.com
/kubernetes/yum/doc/yum-key
.gpg
http:
//mirrors
.aliyun.com
/kubernetes/yum/doc/rpm-package-key
.gpg
EOF
全部節點安裝kubelet,kubeadm,kubectl
kubelet運行在cluster全部節點上,負責啓動容器和Pod
kubeadm用於初始化Cluster
kubectl是Kubernetes命令行工具。經過kubectl能夠部署和管理應用,查看各類資源,建立,刪除和更新各類組件
install
kubelet kubeadm kubectl --disableexcludes=kubernetes
在master1上執行初始化
kubeadm init --config /etc/kubernetes/kubeadm.conf
node節點加入集羣:在node節點上執行master初始化以後最後提示的命令;
在node節點上執行master初始化以後最後提示的命令;
若是沒保存,能夠嘗試如下命令
先在master 上經過kubeadm token list查看token
而後在node上執行:kubeadm join token 192.168.7.78:6443 i9gsiq.c3pr5uocthnbeacf --discovery-token-unsafe-skip-ca-verification(容許 在沒有--discovery-token-ca-cert-hash的狀況下進行鏈接)
在master上查看節點狀況: kubectl get node
目前還處於NotReady,繼續下面步驟部署pod網絡
部署pod網絡
kubenetes cluster須要安裝Pod網絡,才能進行通訊,不然不通。
kubenetes支持不少中網絡方案,在這裏選擇flannel。
在master上安裝flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
vim kube-flannel.yml 修改kube-flannel.yml與/etc/kubernetes/kubeadm.conf一致
export KUBECONFIG=/etc/kubernetes/admin.conf
將master與本機的IP進行綁定,能夠用 kubectl cluster-info進行查看,若是不設置,默認master是與本機的localhost:8080綁定的,8080自己沒有啓動,因此會報錯
報錯:The connection to the server localhost:8080 was refused - did you specify the right host or port?
kubectl create -f kube-flannel.yml 確認資源
設置完pod網絡以後在master查看node狀態:
若是依然有node處於NotReady的狀態
經過如下方法排查:
kubectl get pod --all-namespaces (查看pod的運行情況,除了Running的狀態,其他所有不正常)
查看運行不正常的pod的緣由
describe pod kube-flannel-ds-amd64-qlgtn --namespace=kube-system (命令輸出的最後一行)
出現這個問題是因爲我在node2上面在配置/etc/sysconfig/kubelet國內源的時候配置錯誤,按照以前上面的步驟進行配置
個人解決辦法是:從新配置/etc/sysconfig/kubelet
在node2上執行 kubeadm reset
在master上面執行 kubectl delete node {nodename}
而後在node2上面從新加入集羣
如下配置爲master的高可用配置,若是是單機版,能夠忽略
將 master上的 /etc/kubernetes/pki 及 /etc/kubernetes/kubeadm.conf 拷貝至兩個master上
在兩個master上分別執行 kubeadm init --config /etc/kubernetes/kubeadm.conf