1、準備工作
Docker 18.09.0 --- kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0 --- k8s.gcr.io/kube-apiserver:v1.14.0 k8s.gcr.io/kube-controller-manager:v1.14.0 k8s.gcr.io/kube-scheduler:v1.14.0 k8s.gcr.io/kube-proxy:v1.14.0 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.3.10 k8s.gcr.io/coredns:1.3.1 --- calico:v3.9.4
1) centos7 機器兩臺,服務器之間能ping通,能連外網
2)更新2臺機器 yum源
yum -y update yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
3)各個機器安裝docker
#1、安裝必要依賴: sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #2、設置docker倉庫,若能科學上網可忽略,此處以aliyun爲例,可以設置其他或者個人倉庫 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #3、若使用aliyun,可以添加一下鏡像加速器(地址-登陸阿里雲-容器管理可得到) sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["這邊替換成自己的實際地址"] } EOF sudo systemctl daemon-reload #4、指定版本安裝docker yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io #5、啓動docker sudo systemctl start docker && sudo systemctl enable docker
4)修改各個機器的hosts,方便查看管理,也可忽略
#1、master節點 sudo hostnamectl set-hostname m vi /etc/hosts #添加以下解析 10.65.110.53 w 10.65.110.33 m #2、worker節點 sudo hostnamectl set-hostname w vi /etc/hosts #添加以下解析 10.65.110.53 w 10.65.110.33 m #3、設置完後,節點互相通過別名能ping通
5)各個服務器配置
# (1)關閉防火牆 systemctl stop firewalld && systemctl disable firewalld # (2)關閉selinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # (3)關閉swap swapoff -a sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab # (4)配置iptables的ACCEPT規則 iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT # (5)設置系統參數 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
2、開始安裝
1)安裝kubeadm
yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0
2) 設置docker和k8s在同一個cgroup
# 1)Docker修改以下文件,在docker啓動參數中添加 --exec-opt native.cgroupdriver=systemd vim /usr/lib/systemd/system/docker.service # 修改以下行,添加上述命令 ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd -H unix:// #重啓docker systemctl restart docker # 2)修改kubedm sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf #修改後查看 Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=systemd" #重啓服務 systemctl enable kubelet && systemctl start kubelet
3)下載kubeadm所需鏡像(科學上網可跳過此步驟)
#查看所需鏡像,個人下載的鏡像版本和名稱要和以下名字嚴格對應,可通過tag方式,因爲kubeadm init時默認是以默認版本鏡像部署 sudo kubeadm config images list #如下: k8s.gcr.io/kube-apiserver:v1.14.0 k8s.gcr.io/kube-controller-manager:v1.14.0 k8s.gcr.io/kube-scheduler:v1.14.0 k8s.gcr.io/kube-proxy:v1.14.0 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.3.10 k8s.gcr.io/coredns:1.3.1. # 1、從國內鏡像倉庫拉取以上版本鏡像,並打tag放入個人倉庫,入aliyun等,方便其他worker機器獲取, docker pull *** docker tag *** *** docker push *** docker login --username=*** ***.com
4)初始化master
# 初始化失敗,需執行 kubeadm reset,排錯後重新執行以下init kubeadm init --kubernetes-version=1.14.0 --apiserver-advertise-address=10.65.110.33 --pod-network-cidr=10.244.0.0/16
/* init流程解釋 01-進行一系列檢查,以確定這臺機器可以部署kubernetes 02-生成kubernetes對外提供服務所需要的各種證書可對應目錄 /etc/kubernetes/pki 03-爲其他組件生成訪問kube-ApiServer所需的配置文件 ls /etc/kubernetes/ admin.conf controller-manager.conf kubelet.conf scheduler.conf 04-爲 Master組件生成Pod配置文件。 ls /etc/kubernetes/manifests/*.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml 05-生成etcd的Pod YAML文件。 ls /etc/kubernetes/manifests/*.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml etcd.yaml 06-一旦這些 YAML 文件出現在被 kubelet 監視的/etc/kubernetes/manifests/目錄下,kubelet就會自動創建這些yaml文件定義的pod,即master組件的容器。master容器啓動後,kubeadm會通過檢查localhost:6443/healthz這個master組件的健康狀態檢查URL,等待master組件完全運行起來 07-爲集羣生成一個bootstrap token 08-將ca.crt等 Master節點的重要信息,通過ConfigMap的方式保存在etcd中,工後續部署node節點使用 09-最後一步是安裝默認插件,kubernetes默認kube-proxy和DNS兩個插件是必須安裝的 */
5) 記錄init輸出日誌,並保存join信息
# 1、以下命令會在init輸入日誌中,可以複製自己的並執行 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 2、join信息如下(在woker節點執行) kubeadm join 10.65.110.33:6443 --token stmaxc.wgvrl03db2ckuhh4 \ --discovery-token-ca-cert-hash sha256:4bc9f2c7c609699c1815cb69e11dca0b3ec041198f1b6c7637608504228a0fe5 # 3、 驗證是否成功 kubectl cluster-info kubectl get pods -n kube-system curl -k https://localhost:6443/healthz # 4、corn-dns處於pending狀態,需安裝網絡插件,以colico爲例 kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml # 5、查看各個pod狀態爲running,若存在其他狀態,可藉助以下命令排錯 kubectl -n kube-system get pod calico-node-9h6mj -o yaml #查看某一個pod的yaml狀態 kubectl get pods --all-namespaces -w #查看所有命名空間的pods信息 kubectl -n kube-system log -f kube-scheduler-m #查看pod日誌信息 kubectl describe pod nginx-7sv2t #默認命名空間下,查看pod詳細信息
6)在worker節點執行
# 1、執行命令 kubeadm join 10.65.110.33:6443 --token stmaxc.wgvrl03db2ckuhh4 \ --discovery-token-ca-cert-hash sha256:4bc9f2c7c609699c1815cb69e11dca0b3ec041198f1b6c7637608504228a0fe5 # 2、在master查看節點狀態 kubectl get nodes # 如下、即完成k8s集羣成功 NAME STATUS ROLES AGE VERSION m Ready master 138m v1.14.0 w Ready <none> 87m v1.14.0