從centos7鏡像到搭建kubernetes集群(kubeadm方式安裝)


  在網上看了不少關於Kubernetes的視頻,雖然現在還未用上,但是也是時候總結記錄一下,父親常教我的一句話:學到手的東西總有一天會有用!我也相信在將來的某一天會用到現在所學的技術。廢話不多扯了。。。。

一、前期准備

1、k8s-master01:master主服務器(存在單點故障)

2、k8s-node01、k8s-node02:2個工作節點

3、Harbor:私有倉庫(簡單記錄搭建Harbor私服倉庫

4、Router:軟路由(由於kubeadm是存放在谷歌雲的,國內無法訪問,K8S集群搭建之軟路由的安裝

二、系統初始化

以下操作均是對3個K8S節點進行操作

1、設置系統主機名

hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01 hostnamectl set-hostname k8s-node02

2、hosts文件相互解析

 vi /etc/hosts,添加如下配置

192.168.66.10 k8s-master01
192.168.66.20 k8s-node01 192.168.66.21 k8s-node02

3、安裝依賴包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

4、設置防火牆為iptables並設置空規則

systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

5、關閉selinux(防止pod運行在虛擬內存)

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

6、調整內核參數,對於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 vm.overcommit_memory=1 vm.panic_on_oom=0 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 net.netfilter.nv_conntrack_max=2310720 EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -f /etc/sysctl.d/kubernetes.conf

7、調整系統時區

#設置xiton.g時區為 中國/上海
timedatectl set-timezone Asia/Shanghai #將當前的UTC時間寫入硬件時鍾 timedatectl set-local-rtc 0 #重啟依賴於系統時間的服務 systemctl restart rsyslog systemctl restart crond

8、關閉系統不需要服務

systemctl stop postfix && systemctl disable postfix

9、設置rsyslogd和systemd journald

mkdir /var/log/journal   #持久化保存日志的目錄
mkdir /etc/systemd/journald.conf.d mkdir > /etc/systemd/journald.conf.d <<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

10、升級系統內核為4.4

CentOS7.x自帶的3.10.x內核存在一些Bugs,導致運行的Docker、ku'bernetes不穩定。

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.189-1.el7.elrepo.x86_64) 7 (Core)' #重啟機器 reboot

 三、Docker相關設置(3個節點)

1、配置daemon

vim /etc/docker/daemon.json
{
    "exec-opts":["native.cgroupdriver=systemd"], "log-driver":"json-file", "log-opts": { "max-size":"100m" } }

2、新建目錄

mkdir -p /etc/systemd/system/docker.service.d

3、重啟Docker

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

 四、安裝Kubeadm(主從配置)

1、配置鏡像源、啟動kubelet

  地址:https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.53322f70MCb4ok

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1

systemctl enable kubelet.service

可能會先出現無socat依賴:可參考我這篇文章:Linux下RabbitMQ的安裝及使用里面有安裝socat依賴的過程

2、導入鏡像

2.1、kubeadm初始化k8s集群時會從谷歌雲中拉取鏡像,國內是無法訪問的。

  所以這里需要導入鏡像,這里從別人通過kexue上網拉取的鏡像:https://pan.baidu.com/share/init?surl=yrbtLGXqXaXmauScaif-3A,提取碼:r6m5

 2.2、解壓壓縮包

tar -xvf kubeadm-basic.images.tar.gz 

2.3、編寫導入鏡像腳本

#!/bin/bash

ls /root/kubeadm-basic.images > /tmp/image-list.txt cd /root/kubeadm-basic.images for i in $(cat /tmp/image-list.txt) do docker load -i $i done rm -rf /tmp/image-list.txt

2.4、賦予執行權限

chmod a+x load-images.sh

2.5、執行導入鏡像腳本:./load-images.sh

 2.6、將鏡像目錄、導入鏡像腳本遠程拷貝至2個從節點、並執行對應導入鏡像腳本

scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root/
scp -r kubeadm-basic.images load-images.sh root@k8s-node02:/root/
./load-images.sh #root家目錄執行該腳本

3、主節點初始化

3.1、獲取初始化配置模板

kubeadm config print init-defaults > kubeadm-config.yaml  #將初始化文件打印至目標文件

3.2、編輯初始配置模板:vim  kubeadm-config.yaml

View Code

3.3、主節點初始化安裝

kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log

依次執行3條命令

mkdir -p $HOME/.kube

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

 4、網絡部署

   由上一步可以看出,node狀態處於notready,這是我們沒有實現扁平化網絡,現在部署一下

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl create -f kube-flannel.yml
kubectl get pod -n kube-system
kubectl get node  #再次查看狀態

 ifconfig也可查看到flannel

 

 5、其他節點加入

 命令已經在在主節點初始化時日志里如下:

kubeadm join 192.168.66.10:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:5be585a83158dedce452998083eda3ba40a578b9e7361b366670a4dd80e47edb

在master主節點查看:kubectl get node

 五、配置私有倉庫Harbor(3個節點)

參考這里搭建私有倉庫Harbor:簡單記錄搭建Harbor私服倉庫

1、配置docker的daemon.json文件

{
    "exec-opts":["native.cgroupdriver=systemd"], "insecure-registries": ["hub.rmitec.com"], "log-driver":"json-file", "log-opts": { "max-size":"100m" } }

2、配置本機hosts文件映射

192.168.66.10 k8s-master01  
192.168.66.20 k8s-node01 192.168.66.21 k8s-node02 192.168.66.15 hub.rmitec.com

3、重啟docker

systemctl restart docker

4、k8s節點操作(node節點),登錄harbor私服倉庫,用戶民:admin,密碼:Harbor12345

 

 5、查看私有倉庫鏡像(可以看出該鏡像下載次數為0)

 六、集群測試

1、master主節點運行pod

kubectl run nginx-deployment --image=hub.rmitec.com/library/mynginx:v1.0  --replicas=1    #運行nginx,指定副本數為1,從私有倉庫Harbor
kubectl get deployment

kubectl get rs

kubectl get pod

kubectl get pod -o wide

 注:可以看出該nginx運行在node02節點,可以在node02節點查看

2、master節點訪問測試:curl 10.244.2.2(/hostname)

3、查看私有倉庫鏡像狀態

4、pod彈性伸縮

 :可以看到node02運行2個nginx,node01運行1個nginx

5、SVC做負載均衡

kubectl get svc

kubectl expose deployment nginx-deployment --port=30000 --target-port=80

6、curl訪問:curl 10.97.248.212:30000

7、ipvadm -Ln查看

8、對外暴露訪問

8.1修改type類型為NodePort

kubectl edit svc nginx-deployment

8.2再次查看type類型

8.3外網測試

8.3.1瀏覽器訪問:http://192.168.66.10:30525/,測試成功

 8.3.2 瀏覽器訪問:http://192.168.66.20:30525/(node01節點)

 8.3.3瀏覽器訪問:http://192.168.66.21:30525/(node02節點)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM