k8s集羣搭建-個人學習使用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章