k8s二進制集群搭建

Kubernetes(K8s)-k8s服務集群安裝

一、環境準備

1、機器環境

節點CPU核數必須是 :>= 2核 ,否則k8s無法啟動

DNS網絡: 最好設置為 本地網絡連通的DNS,否則網絡不通,無法下載一些鏡像

linux內核: linux內核必須是 4 版本以上,因此必須把linux核心進行升級

準備3臺虛擬機環境,或者是3臺阿里云服務器都可。

k8s-master01:? 此機器用來安裝k8s-master的操作環境

k8s-node01: 此機器用來安裝k8s node節點的環境

k8s-node02: 此機器用來安裝k8s node節點的環境

2、依賴環境

#1、給每一臺機器設置主機名

hostnamectl set-hostname k8s-master01

hostnamectl set-hostname k8s-node01

hostnamectl set-hostname k8s-node02

#查看主機名

hostname

#配置IP host映射關系

vi/etc/hosts

192.168.66.10 k8s-master01

192.168.66.11 k8s-node01

192.168.66.12 k8s-node02

?

202.106.0.20

?

#2、安裝依賴環境,注意:每一臺機器都需要安裝此依賴環境

yum install-yconntrack ntpdate ntp ipvsadm ipset jq iptablescurlsysstat libseccompwgetvimnet-toolsgitiproute lrzsz bash-completion tree bridge-utils unzip bind-utilsgcc

?

#3、安裝iptables,啟動iptables,設置開機自啟,清空iptables規則,保存當前規則到默認規則

# 關閉防火墻

systemctlstopfirewalld && systemctl disable firewalld

# 置空iptables

yum-yinstall iptables-services && systemctlstartiptables && systemctl enable iptables && iptables-F&&serviceiptables save

?

#4、關閉selinux

?

#閉swap分區【虛擬內存】并且永久關閉虛擬內存

swapoff-a&&sed-i'/ swap / s/^\(.*\)$/#\1/g'/etc/fstab

#關閉selinux

setenforce0&&sed-i's/^SELINUX=.*/SELINUX=disabled/'/etc/selinux/config

?

?

#5、升級Linux內核為4.44版本

rpm-Uvhhttp://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

#安裝內核

yum--enablerepo=elrepo-kernel install-ykernel-lt

#設置開機從新內核啟動

grub2-set-default'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'

#注意:設置完內核后,需要重啟服務器才會生效。

#查詢內核

uname-r

?

#########################################################################

?

#6、調整內核參數,對于k8s

cat> kubernetes.conf <

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.nf_conntrack_max=2310720

EOF

?

#將優化內核文件拷貝到/etc/sysctl.d/文件夾下,這樣優化文件開機的時候能夠被調用

cpkubernetes.conf /etc/sysctl.d/kubernetes.conf

#手動刷新,讓優化文件立即生效

sysctl-p/etc/sysctl.d/kubernetes.conf

?

?

#7、調整系統臨時區 --- 如果已經設置時區,可略過

#設置系統時區為中國/上海

timedatectl set-timezone Asia/Shanghai

#將當前的 UTC 時間寫入硬件時鐘

timedatectl set-local-rtc0

#重啟依賴于系統時間的服務

systemctlrestartrsyslog

systemctlrestartcrond

?

#7、關閉系統不需要的服務

systemctlstoppostfix && systemctl disable postfix

?

?

#8、設置日志保存方式

#1).創建保存日志的目錄

mkdir/var/log/journal

#2).創建配置文件存放目錄

mkdir/etc/systemd/journald.conf.d

#3).創建配置文件

cat> /etc/systemd/journald.conf.d/99-prophet.conf <

[Journal]

Storage=persistent

Compress=yes

SyncIntervalSec=5m

RateLimitInterval=30s

RateLimitBurst=1000

SystemMaxUse=10G

SystemMaxFileSize=200M

MaxRetentionSec=2week

ForwardToSyslog=no

EOF

?

#4).重啟systemd journald的配置

systemctlrestartsystemd-journald

?

#9、打開文件數調整 (可忽略,不執行)

echo"* soft nofile 65536">> /etc/security/limits.conf

echo"* hard nofile 65536">> /etc/security/limits.conf

?

#10、kube-proxy 開啟 ipvs 前置條件

modprobe br_netfilter

cat> /etc/sysconfig/modules/ipvs.modules <

#!/bin/bash

modprobe--ip_vs

modprobe--ip_vs_rr

modprobe--ip_vs_wrr

modprobe--ip_vs_sh

modprobe--nf_conntrack_ipv4

EOF

##使用lsmod命令查看這些文件是否被引導

chmod755/etc/sysconfig/modules/ipvs.modules &&bash/etc/sysconfig/modules/ipvs.modules && lsmod |grep-eip_vs-enf_conntrack_ipv4

?

3、docker部署

#1、安裝docker

yum install-yyum-utils device-mapper-persistent-data lvm2

?

#緊接著配置一個穩定(stable)的倉庫、倉庫配置會保存到/etc/yum.repos.d/docker-ce.repo文件中

yum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.repo

?

#更新Yum安裝的相關Docke軟件包&安裝Docker CE

yum update-y&& yum install docker-ce

?

#2、設置docker daemon文件

#創建/etc/docker目錄

mkdir/etc/docker

#更新daemon.json文件

cat> /etc/docker/daemon.json <

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

EOF

#注意: 一定注意編碼問題,出現錯誤:查看命令:journalctl -amu? docker 即可發現錯誤

?

#創建,存儲docker配置文件

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

?

#3、重啟docker服務

systemctl daemon-reload && systemctlrestartdocker && systemctl enable docker

4、kubeadm

#1、安裝kubernetes的時候,需要安裝kubelet, kubeadm等包,但k8s官網給的yum源是packages.cloud.google.com,國內訪問不了,此時我們可以使用阿里云的yum倉庫鏡像。

cat< /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

?

#2、安裝kubeadm、kubelet、kubectl

yum install-ykubeadm-1.15.1 kubelet-1.15.1 kubectl-1.15.1

# 啟動 kubelet

systemctl enable kubelet && systemctlstartkubelet

?

二、集群安裝

1、依賴鏡像

上傳鏡像壓縮包,把壓縮包中的鏡像導入到本地鏡像倉庫

編寫腳本問題,導入鏡像包到本地docker鏡像倉庫:

# kubeadm 初始化k8s集群的時候,會從gce Google云中下載(pull)相應的鏡像,且鏡像相對比較大,下載比較慢,且需要解決科學上網的一個問題,國內上goole,懂得...........

?

#1、導入鏡像腳本代碼? (在任意目錄下創建sh腳本文件:image-load.sh)

#!/bin/bash

#注意 鏡像解壓的目錄位置

ls/root/kubeadm-basic.images > /tmp/images-list.txt

cd/root/kubeadm-basic.images

foriin$(cat /tmp/images-list.txt)

do

docker load-i$i

done

rm-rf/tmp/images-list.txt

?

#2、修改權限,可執行權限

chmod755image-load.sh

?

#3、開始執行,鏡像導入

./image-load.sh

?

#4、傳輸文件及鏡像到其他node節點

#拷貝到node01節點

scp-rimage-load.sh kubeadm-basic.images root@k8s-node01:/root/

#拷貝到node02節點

scp-rimage-load.sh kubeadm-basic.images root@k8s-node02:/root/

?

#其他節點依次執行sh腳本,導入鏡像

導入成功后鏡像倉庫如下圖所示:

2、k8s部署

#初始化主節點 --- 只需要在主節點執行

?

#1、拉去yaml資源配置文件

kubeadm config print init-defaults > kubeadm-config.yaml

?

#2、修改yaml資源文件

? ? localAPIEndpoint:

? ? advertiseAddress:192.168.66.10# 注意:修改配置文件的IP地址

? ? kubernetesVersion: v1.15.1#注意:修改版本號,必須和kubectl版本保持一致

? ? networking:

? ? # 指定flannel模型通信 pod網段地址,此網段和flannel網段一致

? ? podSubnet:"10.244.0.0/16"

? ? serviceSubnet:"10.96.0.0/12"

? ? #指定使用ipvs網絡進行通信

? ? ---

? ? apiVersion: kubeproxy.config.k8s.io/v1alpha1

? ? kind: kubeProxyConfiguration

? ? featureGates:

? ? SupportIPVSProxyMode:true

? ? mode: ipvs

?

#3、初始化主節點,開始部署

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

#注意:執行此命令,CPU核心數量必須大于1核,否則無法執行成功

?

kubernetes主節點初始化成功后,如下所示:

按照k8s指示,執行下面的命令:

?

#4、初始化成功后執行如下命令

#創建目錄,保存連接配置緩存,認證文件

mkdir-p$HOME/.kube

#拷貝集群管理配置文件

cp-i/etc/kubernetes/admin.conf$HOME/.kube/config

#授權給配置文件

chown$(id -u):$(id -g)$HOME/.kube/config

?

執行命令前查詢node:

執行命令后查詢node:

我們發現已經可以成功查詢node節點信息了,但是節點的狀態卻是NotReady,不是Runing的狀態。原因是此時我們使用ipvs+flannel的方式進行網絡通信,但是flannel網絡插件還沒有部署,因此節點狀態此時為NotReady

3、flannel插件

#部署flannel網絡插件 --- 只需要在主節點執行

#1、下載flannel網絡插件

wgethttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

?

#2、部署flannel

kubectl create-fkube-flannel.yml

?

#也可進行部署網絡

kubectl apply-fhttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

部署完畢查詢pod,發現一些異常錯誤現象:

發現通過flannel部署的pod都出現pending,ImagePullBackOff這樣的問題:

查詢日志信息,發現了一些錯誤:

#查詢一個pod的詳細信息

kubectl describe pod kube-flannel-ds-amd64-jd67h-nkube-system

kubectl apply-fkube-flannel.yml#服務已正常啟動

?

部署flannel網絡插件時候,注意網絡連通的問題:

4、節點Join

構建kubernetes主節點成功,會產生一個日志文件(命令中指定日志輸出文件 “tee kubeadm-init.log”),內容如下所示:

紅色 部分給出的命令即是把其他節點加入進來的命令。

# 加入主節點以及其余工作節點,執行安裝日志中的命令即可

#查看日志文件

cat kubeadm-init.log

# 負責命令到其他幾個node節點進行執行即可

kubeadm join 192.168.66.10:6443 --token abcdef.0123456789abcdef \

? ? --discovery-token-ca-cert-hash sha256:6d8aad1451c1303ee52aada4ea2351e8c8d64863b074628586535d0d369ca2c2

執行完畢,查看效果如下所示:

發現還有一些節點處于NotReady狀態,是因為這些節點pod容器還處于初始化的狀態,需要等一點時間:

更詳細查看命令,可以看見初始化節點所屬節點:

# 查詢工作空間中pod容器的詳細信息

kubectl get pod -n kube-system -o wide

5、私有倉庫

#私有倉庫搭建 harbor

# 偽造證書

"insecure-registries": ["https://hub.kaikeba.com"]

# 把證書添加/etc/docker/daemon.json文件中,其的每一個節點都做如下模式添加:偽造證書

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

# node01 添加 "insecure-registries": ["https://hub.kaikeba.com"]

# node02 添加 "insecure-registries": ["https://hub.kaikeba.com"]

# 偽造證書

vi /etc/docker/daemon.json

#更詳細教程,參考私有倉庫構建md文檔

6、案例實戰

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374