溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

安裝部署Kubernetes集群實(shí)戰(zhàn)

發(fā)布時(shí)間:2020-07-02 17:14:45 來源:網(wǎng)絡(luò) 閱讀:1016 作者:wx5b9c94b17c62a 欄目:云計(jì)算

kubernetes概述:

Kubernetes是一個(gè)開源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡單并且高效(powerful),Kubernetes提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。
Kubernetes是Google 2014年創(chuàng)建管理的,是Google 10多年大規(guī)模容器管理技術(shù)Borg的開源版本。

通過kubernetes可以實(shí)現(xiàn)的功能:

  • 快速部署應(yīng)用
  • 快速擴(kuò)展應(yīng)用
  • 無縫對(duì)接新的應(yīng)用功能
  • 節(jié)省資源,優(yōu)化硬件資源的使用

我們的目標(biāo)是促進(jìn)完善組件和工具的生態(tài)系統(tǒng),以減輕應(yīng)用程序在公有云或私有云中運(yùn)行的負(fù)擔(dān)。

kubernetes的特點(diǎn):

  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  • 可擴(kuò)展: 模塊化, 插件化, 可掛載, 可組合
  • 自動(dòng)化: 自動(dòng)部署,自動(dòng)重啟,自動(dòng)復(fù)制,自動(dòng)伸縮/擴(kuò)展

為什么要使用容器?容器優(yōu)勢總結(jié):

  • 快速創(chuàng)建/部署應(yīng)用:與VM虛擬機(jī)相比,容器鏡像的創(chuàng)建更加容易。
  • 持續(xù)開發(fā)、集成和部署:提供可靠且頻繁的容器鏡像構(gòu)建/部署,并使用快速和簡單的回滾(由于鏡像不可變性)。
  • 開發(fā)和運(yùn)行相分離:在build或者release階段創(chuàng)建容器鏡像,使得應(yīng)用和基礎(chǔ)設(shè)施解耦。
  • 開發(fā),測試和生產(chǎn)環(huán)境一致性:在本地或外網(wǎng)(生產(chǎn)環(huán)境)運(yùn)行的一致性。
  • 云平臺(tái)或其他操作系統(tǒng):可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何環(huán)境中運(yùn)行。
  • Loosely coupled,分布式,彈性,微服務(wù)化:應(yīng)用程序分為更小的、獨(dú)立的部件,可以動(dòng)態(tài)部署和管理。
  • 資源隔離
  • 資源利用:更高效

kubernetes能做什么?
可以在物理或虛擬機(jī)的Kubernetes集群上運(yùn)行容器化應(yīng)用,Kubernetes能提供一個(gè)以“容器為中心的基礎(chǔ)架構(gòu)”,滿足在生產(chǎn)環(huán)境中運(yùn)行應(yīng)用的一些常見需求,如:

  • 多個(gè)進(jìn)程(作為容器運(yùn)行)協(xié)同工作。(Pod)
  • 存儲(chǔ)系統(tǒng)掛載
  • Distributing secrets
  • 應(yīng)用健康檢測
  • 應(yīng)用實(shí)例的復(fù)制
  • Pod自動(dòng)伸縮/擴(kuò)展
  • Naming and discovering
  • 負(fù)載均衡
  • 滾動(dòng)更新
  • 資源監(jiān)控
  • 日志訪問
  • 調(diào)試應(yīng)用程序
  • 提供認(rèn)證和授權(quán)

kubernetes中文官網(wǎng):
https://kubernetes.io/zh/
kubernetes中文社區(qū):
https://www.kubernetes.org.cn/doc-11

搭建kubernetes集群

環(huán)境準(zhǔn)備:

3臺(tái)dockerhost主機(jī)(centos7)
master: 172.16.1.30
node01:172.16.1.31
node02:172.16.1.32
注意事項(xiàng):每臺(tái)主機(jī)內(nèi)存最少2GB,最低雙核cpu,每臺(tái)主機(jī)必須安裝docker環(huán)境,關(guān)閉防火墻(一般kubernetes是運(yùn)行在公司內(nèi)部的),禁用selinux,確保時(shí)間同步。

我們現(xiàn)在安裝kubernetes時(shí),利用的是kubernetes官方開發(fā)出來的自動(dòng)化部署的軟件(kubeadm),以來實(shí)現(xiàn)更快速的安裝kubernetes。

清空iptables規(guī)則,并重新加載docker(全部節(jié)點(diǎn)都需操作):

[root@master ~]# iptables -F
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker

(1)修改主機(jī)名:

[root@sqm-docker01 ~]# hostnamectl  set-hostname  master
[root@sqm-docker01 ~]# bash
[root@sqm-docker02 ~]# hostnamectl  set-hostname  node01
[root@sqm-docker02 ~]# bash
[root@sqm-docker03 ~]# hostnamectl set-hostname node02
[root@sqm-docker03 ~]# bash

(2)ssh,域名解析,免密登錄:

配置域名解析:
[root@master ~]# vim /etc/hosts

安裝部署Kubernetes集群實(shí)戰(zhàn)
##將hosts文件拷貝給其他節(jié)點(diǎn):

[root@master ~]# scp /etc/hosts  root@172.16.1.31:/etc/hosts
[root@master ~]# scp /etc/hosts  root@172.16.1.32:/etc/hosts
免密登錄:
[root@master ~]# ssh-keygen -t rsa  #生成密鑰

安裝部署Kubernetes集群實(shí)戰(zhàn)
將密鑰拷貝給其他節(jié)點(diǎn):
[root@master ~]# ssh-copy-id node01
[root@master ~]# ssh-copy-id node02

(3)禁用swap(kubernetes特性)
注意:所有節(jié)點(diǎn)都需禁用,不然無法加入集群。
[root@master ~]# swapoff -a #臨時(shí)生效
安裝部署Kubernetes集群實(shí)戰(zhàn)

永久禁用swap:(修改開機(jī)加載配置文件)
[root@master ~]# vim /etc/fstab

安裝部署Kubernetes集群實(shí)戰(zhàn)

可以重新加載使其生效:
[root@master ~]# mount -a

安裝kubernetes:

登錄阿里巴巴開源鏡像站,下載yum源:
安裝部署Kubernetes集群實(shí)戰(zhàn)
安裝部署Kubernetes集群實(shí)戰(zhàn)
編寫自定義repo文件:(三個(gè)節(jié)點(diǎn)都需要部署)

[root@master yum.repos.d]# pwd
/etc/yum.repos.d
[root@master yum.repos.d]# vim kubernetes.repo

安裝部署Kubernetes集群實(shí)戰(zhàn)

查看可用的repo源:
[root@master yum.repos.d]# yum repolist

安裝部署Kubernetes集群實(shí)戰(zhàn)
##在本地生成緩存:
[root@master yum.repos.d]# yum makecache
安裝部署Kubernetes集群實(shí)戰(zhàn)
##將repo文件拷貝給node01和node02:

[root@master yum.repos.d]# scp kubernetes.repo  node01:/etc/yum.repos.d/
[root@master yum.repos.d]# scp kubernetes.repo  node02:/etc/yum.repos.d/

接下來在兩個(gè)節(jié)點(diǎn)上執(zhí)行相同操作。

(2)打開iptables橋接功能(三個(gè)節(jié)點(diǎn)都需部署)

[root@master ~]# vim /etc/sysctl.d/k8s.conf    #在該目錄下自定義conf文件
//添加以下配置項(xiàng):
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
//重新加載文件使其生效:
[root@master ~]#  sysctl -p /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

注意:如果報(bào)“找不到文件”,我們需要加載一個(gè)模塊:
[root@master ~]# modprobe br_netfilter

將配置文件拷貝給node01和node02進(jìn)行部署。

(3)打開路由轉(zhuǎn)發(fā)(三個(gè)節(jié)點(diǎn)都需部署)

[root@master ~]# echo net.ipv4.ip_forward = 1 > /etc/sysctl.conf 
[root@master ~]# sysctl -p   #加載該文件,使其生效
net.ipv4.ip_forward = 1

同樣的將配置文件拷貝給node01和node02進(jìn)行部署。


(4)在master節(jié)點(diǎn)上進(jìn)行操作:

#修改yum的配置文件,緩存下面要下載的rpm包:
[root@master ~]# vim /etc/yum.conf 

安裝部署Kubernetes集群實(shí)戰(zhàn)
進(jìn)行下載:
[root@master ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0

下載完成后查看是否緩存了rpm包:
[root@master ~]#  cd /var/cache/yum/x86_64/7/kubernetes/packages

安裝部署Kubernetes集群實(shí)戰(zhàn)

##將服務(wù)加入開機(jī)自啟:
[root@master ~]# systemctl enable kubelet.service
安裝部署Kubernetes集群實(shí)戰(zhàn)
初始化集群(下載鏡像):
可是由于國內(nèi)網(wǎng)絡(luò)環(huán)境限制,我們不能直接從谷歌的鏡像站下載鏡像,這時(shí),需要我們手工從docker鏡像站下載鏡像,然后重新命名,這里用腳本來實(shí)現(xiàn)。
腳本部分內(nèi)容如下:
#可以參考這樣的格式進(jìn)行下載:
[root@master ~]# cat k8s.sh
#!/bin/bash
docker pull mirrorgooglecontainers/kube-apiserver:v1.14.1
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.1
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.1
docker pull mirrorgooglecontainers/kube-proxy:v1.14.1
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1

這里我是已經(jīng)下載好了,只需要導(dǎo)入形影的鏡像即可:
[root@master ~]# mkdir images
[root@master ~]# cd images/
安裝部署Kubernetes集群實(shí)戰(zhàn)
導(dǎo)入鏡像命令:docker load --input
安裝部署Kubernetes集群實(shí)戰(zhàn)

##初始化集群:
[root@master images]# kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

參數(shù)解釋:
--kubernetes-version:指定當(dāng)前kubernetes版本號(hào)(查看版本:kubelet --version)
--pod-network: 指定pod網(wǎng)段,kubernetes默認(rèn)指定網(wǎng)絡(luò)。
--ignore:忽略所有報(bào)錯(cuò)

安裝部署Kubernetes集群實(shí)戰(zhàn)

注意:如果初始化成功后的信息信息被覆蓋了想要重新初始化,可以先執(zhí)行kubeadm reset命令重置一下,再重新初始化。
而當(dāng)你執(zhí)行完重置命令后,初始化時(shí),可能會(huì)報(bào)以下錯(cuò)誤:
安裝部署Kubernetes集群實(shí)戰(zhàn)
報(bào)錯(cuò)指的是數(shù)據(jù)庫的一個(gè)error,所以我們需要將該目錄該刪除掉,就可以重新初始化了:
[root@master ~]# rm -rf /var/lib/etcd

##根據(jù)上面的提示創(chuàng)建目錄并授予權(quán)限:

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

##查看節(jié)點(diǎn):
安裝部署Kubernetes集群實(shí)戰(zhàn)
可以看出master的狀態(tài)是未就緒(NotReady),之所以是這種狀態(tài)是因?yàn)檫€缺少一個(gè)附件flannel,沒有網(wǎng)絡(luò)各Pod是無法通信的。

#部署docker容器的跨主機(jī)網(wǎng)絡(luò):

//將該yml文件下載到本地:
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

安裝部署Kubernetes集群實(shí)戰(zhàn)

//執(zhí)行該yml文件:
[root@master ~]# kubectl apply -f kube-flannel.yml 

安裝部署Kubernetes集群實(shí)戰(zhàn)

//查看配置好的yml文件:
安裝部署Kubernetes集群實(shí)戰(zhàn)

(5)以上是主節(jié)點(diǎn)的安裝部署,然后個(gè)node幾點(diǎn)的安裝
####node01和node02分別進(jìn)行下載(無需安裝kubectl):
[root@node01 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
[root@node02 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0

###下載完成后將該服務(wù)加入開機(jī)自啟:
[root@node01 ~]# systemctl enable kubelet.service 
[root@node02 ~]# systemctl enable kubelet.service 

node01:(導(dǎo)入本地鏡像)

[root@node01 ~]# mkdir images
[root@node01 ~]# cd images/

安裝部署Kubernetes集群實(shí)戰(zhàn)
安裝部署Kubernetes集群實(shí)戰(zhàn)

##將這些鏡像拷貝給node02,進(jìn)行安裝:
[root@node01 images]# scp * node02:/root/images

##導(dǎo)入后查看node02鏡像:
安裝部署Kubernetes集群實(shí)戰(zhàn)

(6)將node01和node02節(jié)點(diǎn)加入集群:
執(zhí)行以下命令加入集群(在初始化集群是生成的,并且每次的值都是不同的)
kubeadm join 172.16.1.30:6443 --token 6udpmi.u4msx9vgkqfr1i1l --discovery-token-ca-cert-hash sha256:4fdbbb94d5d7087a6c27d441df2f89d21e9ca035f0386ed963a195656794619a
安裝部署Kubernetes集群實(shí)戰(zhàn)

node02節(jié)點(diǎn)執(zhí)行同樣的操作。

##當(dāng)node01和node02加入集群后,在master上查看節(jié)點(diǎn)的信息:
安裝部署Kubernetes集群實(shí)戰(zhàn)
確保有其他節(jié)點(diǎn)的信息,并且狀態(tài)都為ready。

注意:如果狀態(tài)為NotReady,那就是網(wǎng)絡(luò)的問題,沒有部署跨主機(jī)網(wǎng)絡(luò),則需要執(zhí)行上面部署docker容器的跨主機(jī)的網(wǎng)絡(luò)。

至此kubernetes集群已經(jīng)搭建完畢---------------------

接來下進(jìn)行優(yōu)化操作:

(1)更改tab距離:
[root@master ~]# vim .vimrc
set tabstop=2
[root@master ~]# source .vimrc
(2)//kubect命令自動(dòng)補(bǔ)全:
[root@master ~]# yum install -y bash-completion
[root@master ~]# source /usr/share/bash-completion/bash_completion 
[root@master ~]# source <(kubectl completion bash)
[root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
(3)//查看運(yùn)行中的pod資源(資源對(duì)象中的一種),-n:namespace  kube-system(kubernetes自帶的命名空間)
[root@master ~]# kubectl get pods -n kube-system

安裝部署Kubernetes集群實(shí)戰(zhàn)
部署kubernetes集群內(nèi)容到此完畢。。。

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI