前言
上篇把三個節點(一個Master節點和兩個Node節點)互相ping通了,也能訪問網路了,現在繼續搭建,并使用kubeadm搭建主節點
集群搭建
1、看看我們三個節點的IP

2、設定鏡像源,使用aliyun的鏡像源,并安裝依賴包(以下命令都需要在3個節點執行)
yum -y install wget # 安裝wget wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 使用阿里云鏡像 yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables cur sysstat libseccomp wget vim net-tools git # 安裝依賴包

3、關閉防火墻,并為Iptables設定空規則
因為我們不需要用到,就自己使用,而且防火墻可能會阻止docker
# 關閉防火墻并設定不再自啟
systemctl stop firewalld && systemctl disable firewalld
# 配置iptables規則 yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

4、關閉SELINUX
主要是k8s會去檢測swap磁區,可能導致pod在虛擬記憶體運行,降低作業效率
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

5、調整k8s的內核引數
cat > kubernetes.conf <<EOF net.bridge.bridge-nf-call-iptables=1 # 開啟網橋模式 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 net.ipv4.tcp_tw_recycle=0 vm.swappiness=0 # 禁止使用 swap 空間,只有當系統 OOM時才允許使用它 vm.overcommit_memory=1 # 不檢查物理記憶體是否夠用 vm.panic_on_oom=0 # 開啟 OOM fs.inotify.max_user_instances=8192 fs.inotify.max_user_watches=1048576 fs.file-max=52706963 fs.nr_open=52706963 net.ipv6.conf.all.disable_ipv6=1 # 關閉ipv6 net.netfiler.nf_conntrack_max=2310720 EOF
# 將Kubernete.conf 復制到/etc/sysctl.d目錄下 cp kubernetes.conf /etc/sysctl.d/kubernetes.conf sysctl -p /etc/sysctl.d/kubernetes.conf

提示沒有檔案或目錄,不用管他,后面centos內核到4.4就好了
6、關閉系統不需要的服務
systemctl stop postfix && systemctl disable postfix
7、設定rsyslogd和systemd journald
mkdir /var/log/journal # 持久化保存日志的目錄 mkdir /etc/systemd/journald.conf.d cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF [Journal] # 持久化保存到磁盤 Storage=persistent # 壓縮歷史日志 Compress=yes SyncIntervalSec=5m RateLimitInterval=30s RateLimitBurst=1000 # 最大占用空間 10G SystemMaxUse=10G # 單日志檔案最大 200M SystemMaxFileSize=200M # 日志保存時間 2 周 MaxRetentionSec=2week # 不將日志轉發到 syslog ForwardToSyslog=no EOF systemctl restart systemd-journald

8、升級系統內核為4.4
因為CentOS7 版本中自帶3.*內核存在一些bugs,會導致運行的docker、Kubernetes不穩定
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm # 安裝完成后檢查 /boot/grub2/grub.cfg 中對應內核 menuentry中是否包含 initrd16配置,如果沒有,再安裝一次, yum --enablerepo=elrepo-kernel install -y kernel-lt # 設定開機從新內核啟動 grub2-set-default "CentOS Linux (4.4.241-1.el7.elrepo.x86_64) 7 (Core)" # 重啟 reboot

重啟完使用uname -r 去檢測,就可以看到自動啟用了4.4內核的版本
9、配置kube-proxy開啟ipvs,用于解決svc和pod的調度關系,增加訪問效率
modprobe br_netfilter # 以下內容寫到ipvs.modules中 cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF # 使用chmod 給權限 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

10、安裝Docker
# yum 安裝docker需要的工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加鏡像源 yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum update -y && yum install -y docker-ce # 重啟 reboot # 此處需要重啟配置啟動Centos7系統的4.4內核,因為失效了,需要重新配置一次,以后就不會了 grub2-set-default "CentOS Linux (4.4.241-1.el7.elrepo.x86_64) 7 (Core)" # 啟動dokcer systemctl start docker && systemctl enable docker ## 創建 /etc/docker 目錄 mkdir /etc/docker # 配置daemon cat > /etc/docker/daemon.json <<EOF { "exec-opts":["native.cgroupdriver=systemd"], "log-driver":"json-file", "log-opts":{ "max-size":"100m" } } EOF # 創建目錄,存放docker的組態檔 mkdir -p /etc/systemd/system/docker.service.d # 重啟docker服務 systemctl daemon-reload && systemctl restart docker && systemctl enable docker

安裝260m左右,還是挺大的,安裝后等重啟,重啟配置一下內核啟動,接著配置daemon.json檔案,并設定docker開機自啟等作業,

11、安裝kubeadm,實作主從配置
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 # 安裝kubeadm yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1 # 設定開機自啟 systemctl enable kubelet.service

安裝完后設定kubelet.service開機自啟
12、使用kubeadm安裝包安裝
由于是看視頻和博客學習的,所以先拿別人下載好的鏡像包來玩,少踩點坑,用的是1.15.1,后面再去搞搞最新的,我放百度云了
鏈接:https://pan.baidu.com/s/1pnphP8JA7mWx693-Mw9G7w
提取碼:esh8
安裝拖曳檔案的命令
yum -y install lrzsz
將檔案拖入到/root/路徑下
# 解壓 tar -zxvf kubeadm-basic.images.tar.gz # 查看檔案 ls

解壓出來的檔案還需要在解壓,而且其他節點也需要用到,就寫個腳本load-images.sh執行
vi load-images.sh #!/bin/bash # 查詢kubeadm-basic.images檔案夾下的檔案,并寫入到臨時檔案里面 ls /root/kubeadm-basic.images > /tmp/image-list.txt cd /root/kubeadm-basic.images # 遍歷kubeadm-basic.images下的檔案,并解壓 for i in $( cat /tmp/image-list.txt ) do docker load -i $i done # 洗掉臨時檔案 rm -rf /tmp/image-list.txt
# 并賦予權限 chmod a+x load-images.sh # 執行腳本 ./load-images.sh

其他兩個node節點也要哦,可以把kubeadm-basic.images檔案夾和load-images.sh檔案copy過去,并執行./load-images.sh命令
scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root/ scp -r kubeadm-basic.images load-images.sh root@k8s-node02:/root/ # 并分別在node01和node02節點上執行命令 ./load-images.sh
13、初始化主節點(這一步只需要在Master上操作)
# 列印初始化資訊到kubeadm-config.yaml 需要修改里面的配置資訊 kubeadm config print init-defaults > kubeadm-config.yaml # 查看檔案 ls
# 編輯改檔案,需要改ip等資訊
vim kubeadm-config.yaml

[root@k8s-master01 ~]# cat kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.81.110 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: k8s-master01 taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: k8s.gcr.io kind: ClusterConfiguration kubernetesVersion: v1.15.1 networking: dnsDomain: cluster.local podSubnet: "10.244.0.0/16" serviceSubnet: 10.96.0.0/12 scheduler: {} --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration featureGates: SupportIPVSProxyMode: true mode: ipvs

如上圖,改了這幾處,ip就選自己的,其他不變
切記,這里需要配置了/etc/hosts 檔案,不然會失敗的
# 開始初始化主節點,并加執行產生的日志寫入到kubeadm-init.log中,需要用到的 kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
# 查看日志
cat kubeadm-init.log

加入主節點以及其他節點
# 執行安裝日志中的加入命令即可, mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
將我們的kubeadm-init.log kubeadm-config.yaml 檔案放置到別的路徑下,不要放在root上,以防被洗掉,并創建flannel目錄,用來部署網路
mkdir install-k8s mv kubeadm-init.log kubeadm-config.yaml install-k8s/ cd install-k8s mkdir core mv * core/ mkdir plugin cd plugin/ mkdir flannel cd flannel/
14、部署網路,使用flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

創建kube-flannel(這里有個坑,查看kube-flannel.yml后會發現有個quay.io域名下的鏡像,如果不能訪問國外網路是無法使用的,因為我這邊能訪問,所以執行成功,看到網上執行失敗的是改了別人的鏡像操作的)
kubectl create -f kube-flannel.yml

# 查看pod狀態 kubectl get pod -n kube-system -o wide
kube-flannel下的Pod就運行起來了,不然會出現Init(0/1)的狀態

因此,我們的Master節點就部署完成了,接下來就是讓我們的Node節點加入到Master節點上,剛才查看的kubeadm-init.log,最后一句命令就是使Node節點加入Master集群中

在Node節點上分別執行
kubeadm join 192.168.81.110:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:dfc8c90375edce13d20fe81f3d78380940f6a6d2356b05729d13c163c4b72b3f
# Node節點加入之后,繼續查看pod狀態 kubectl get pod -n kube-system -o wide

Node節點已經就加入啦,這樣,我們的集群就ok了

15、使用Kubectl Deployment來運行一個Pod
# 創建3個副本 kubect run nginx-deployment --image=nginx:latest --port=80 --replicas=3 # 查看deployment狀態 kubectl get deployment # 查看rs kubectl get rs # 查看pod,會發現運行在了不同的節點上啦 kubect get pod -o wide

總結
本篇挺長的,也順利運行起來了,下篇講講私有倉庫搭建,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/205595.html
標籤:其他
上一篇:ServiceMesh案例
下一篇:ServiceMesh案例
