集群篇-k8s介绍
@[TOC]集群篇-k8s介紹
一、集群業(yè)務(wù)介紹
集群篇: 服務(wù)器的搭建、集群的管理、運(yùn)維
1.集群業(yè)務(wù)介紹
集群:k8s及自動(dòng)化部署,服務(wù)器的預(yù)警監(jiān)控功能
二、k8s 集群部署
K8S部署&DevOps ,百度云地址 提取碼 1111
1.k8s 快速入門(mén)
1).Kubernetes 是什么?
Kubernetes 簡(jiǎn)稱(chēng) k8s。是用于自動(dòng)部署,擴(kuò)展和管理容器化應(yīng)用程序的開(kāi)源系統(tǒng)。
中文官網(wǎng):https://kubernetes.io/zh/
中文社區(qū):https://www.kubernetes.org.cn/
官方文檔:https://kubernetes.io/zh/docs/home/ 筆記的版本是1.7.1
社區(qū)文檔:http://docs.kubernetes.org.cn/
a.部署方式的進(jìn)化
https://kubernetes.io/zh/docs/concepts/overview/
b. Kubernetes的功能:
服務(wù)發(fā)現(xiàn)和負(fù)載均衡、存儲(chǔ)編排、自動(dòng)部署和回滾、自動(dòng)完成裝箱計(jì)算、自我修復(fù)、密鑰與配置管理
它僅僅是幫我們部署、管理集群的
c. Kubernetes 不是什么
不限制支持的應(yīng)用程序類(lèi)型
不部署源代碼、也不構(gòu)建你的應(yīng)用程序
不提供應(yīng)用程序級(jí)別的服務(wù)作為內(nèi)置服務(wù)
不要求日志記錄、監(jiān)視或警報(bào)解決方案
不提供或不要求配置語(yǔ)言/系統(tǒng)
不提供也不采用任何全面的機(jī)器配置、維護(hù)、管理或自我修復(fù)系統(tǒng)
Kubernetes 不僅僅是一個(gè)編排系統(tǒng),實(shí)際上它消除了編排的需要
d. Kubernetes 可以做的工作
Kubernetes :調(diào)度、自動(dòng)恢復(fù)、水平伸縮
調(diào)度:服務(wù)的調(diào)度
自動(dòng)恢復(fù):發(fā)現(xiàn)某個(gè)服務(wù)器(節(jié)點(diǎn))不響應(yīng),Kubernetes 可以自動(dòng)把應(yīng)用轉(zhuǎn)移恢復(fù)到另外一個(gè)服務(wù)器上,從另一服務(wù)器上拉起這個(gè)應(yīng)用。那么,這個(gè)應(yīng)用還能照常工作。
水平伸縮:比如黃色應(yīng)用太忙,超過(guò)了業(yè)務(wù)負(fù)載。Kubernetes 檢查到此狀態(tài),可以將這個(gè)非常忙的應(yīng)用直接復(fù)制到多臺(tái)服務(wù)器。所以可以自動(dòng)伸縮。包括如果應(yīng)用閑了,不需要這么多資源,可以把多余應(yīng)用剔除掉,保持最新的狀態(tài)。
Kubernetes 就是一個(gè)分布式編排系統(tǒng),管理分布式系統(tǒng)的。
2).架構(gòu)
Kubernetes 組件
Master 組件:主組件
Node 組件:節(jié)點(diǎn)組件
Kubernetes 最小單元是一個(gè)pod,多個(gè)pod組成service。每一個(gè)pod就是多個(gè)容器。
1、整體主從方式
2、Master 節(jié)點(diǎn)架構(gòu)
3、Node 節(jié)點(diǎn)架構(gòu)
3).概念
2、k8s 集群安裝
2.1、環(huán)境準(zhǔn)備
1、準(zhǔn)備工作
網(wǎng)卡修改: 169.254.116.151 到 192.168.56.1
子網(wǎng)掩碼修改:255.255.0.0 到 255.255.255.0
保存到 D:\software\VirtualBox VMs
2.啟動(dòng)三個(gè)虛擬機(jī)
在.高可用集群篇(架構(gòu)師提升篇)\資料源碼\docs\code下找到k8s文件夾,
k8s 百度云地址 提取碼 1111https://pan.baidu.com/s/1e-WtkRjgS7UXVBWgYyuDcw
a.啟動(dòng)三個(gè)虛擬機(jī)
在k8s文件夾,進(jìn)入cmd模式
創(chuàng)建3個(gè)虛擬機(jī):
創(chuàng)建成功:查看結(jié)果
ip為
192.168.56.100
192.168.56.101
192.168.56.102
b.開(kāi)啟 root 的密碼訪(fǎng)問(wèn)權(quán)限。
使用連接虛擬機(jī):
cmd執(zhí)行命令
切換到root,密碼vagrant
su root 密碼:vagrant開(kāi)啟 root 的密碼訪(fǎng)問(wèn)權(quán)限
vi /etc/ssh/sshd_config 修改 PasswordAuthentication yes 重啟服務(wù) service sshd restart重復(fù)以上步驟:
執(zhí)行2次exit退出,在執(zhí)行命令:
修改k8s-node2、k8s-node3
c.使用xshell連接虛擬機(jī)
d.設(shè)置虛擬機(jī)網(wǎng)絡(luò)環(huán)境- - -NET網(wǎng)絡(luò)網(wǎng)卡
查看默認(rèn)網(wǎng)卡
ip route show,默認(rèn)為eth0
查看ip
不使用網(wǎng)絡(luò)地址轉(zhuǎn)換,怎么修改??
怎么修改?
創(chuàng)建NET網(wǎng)絡(luò)網(wǎng)卡
為每個(gè)虛擬機(jī) 配置網(wǎng)絡(luò)為NET網(wǎng)絡(luò)
測(cè)試
虛擬機(jī)相互ping,再ping外網(wǎng)如百度
3.設(shè)置 linux 環(huán)境(三個(gè)節(jié)點(diǎn)都執(zhí)行)
1).關(guān)閉防火墻:
systemctl stop firewalld systemctl disable firewalld2).關(guān)閉 selinux:(selinux為linux默認(rèn)的安全策略)
sed -i 's/enforcing/disabled/' /etc/selinux/config禁掉當(dāng)前會(huì)話(huà)
setenforce 03).關(guān)閉 swap:(關(guān)閉內(nèi)存交換)
swapoff -a 臨時(shí)
永久
sed -ri 's/.*swap.*/#&/' /etc/fstab驗(yàn)證,swap 必須為 0;
free -g4).添加主機(jī)名與 IP 對(duì)應(yīng)關(guān)系
- 通過(guò)hostname,查看主機(jī)名稱(chēng)
- 通過(guò)ip addr,查看eth0的ip
即/etc/hosts 文件
vi /etc/hosts
ip 為ip addr,獲取node1、node2、node3的ip
5).將橋接的 IPv4 流量傳遞到 iptables 的鏈:三個(gè)虛擬機(jī)都執(zhí)行
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF讓系統(tǒng)應(yīng)用此規(guī)則
sysctl --system
6).備份虛擬機(jī)
三個(gè)虛擬機(jī)都備份
2.2、所有節(jié)點(diǎn) 安裝 Docker、kubeadm、kubelet、kubectl
Docker:Kubernetes 默認(rèn) CRI(容器運(yùn)行時(shí))為 Docker,因此先安裝 Docker
kubeadm:使用kubeadm,使集群部署簡(jiǎn)單
kubelet:kubelet是每一個(gè)node節(jié)點(diǎn)上的代理,幫我們干活。
kubectl:通過(guò)命令行來(lái)操作Kubernetes集群
1、安裝 docker
1)、卸載系統(tǒng)之前的 docker
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine2)、安裝 Docker-CE
安裝必須的依賴(lài)
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2設(shè)置 docker repo 的 yum 位置
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安裝 docker,以及 docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io問(wèn)題:找不到docker-ce docker-ce-cli containerd.io
解決:上面問(wèn)題
更換一下鏡像倉(cāng)庫(kù),更換成阿里云鏡像倉(cāng)庫(kù)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo重新運(yùn)行安裝Docker命令
sudo yum -y install docker-ce docker-ce-cli containerd.io安裝docker 成功:
3)、配置 docker 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://registry.docker-cn.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker問(wèn)題:重啟docker失敗
執(zhí)行sudo systemctl restart docker,失敗
解決:修改daemon.json
編輯/etc/docker/daemon.json
vi /etc/docker/daemon.json添加:
{"registry-mirrors":["https://registry.docker-cn.com"]}再次執(zhí)行----成功
sudo systemctl daemon-reload sudo systemctl restart docker自己的阿里云加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors": ["https://e7fl7xak.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker測(cè)試:
docker 安裝成功
4)、啟動(dòng) docker & 設(shè)置 docker 開(kāi)機(jī)自啟
systemctl enable docker2、添加阿里云 yum 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF3、安裝 kubeadm,kubelet 和 kubectl
yum list|grep kube yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3 systemctl enable kubelet systemctl start kubelet2.3、部署 k8s-master
1、master 節(jié)點(diǎn)初始化
1).修改node1為master,使用 ip addr 獲得它的默認(rèn)網(wǎng)卡eth0的ip
2).按照我們的 images.sh 先拉取鏡像
找到k8s文件夾,把k8s文件夾上傳到node1的root下
切換達(dá)到k8s目錄
修改master_images.sh的權(quán)限
執(zhí)行master_images.sh,下載鏡像
./master_images.sh
查看下載的鏡像
docker images
3).master 節(jié)點(diǎn)初始化
kubeadm init \--apiserver-advertise-address=10.0.2.15 \--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \--kubernetes-version v1.17.3 \--service-cidr=10.96.0.0/16 \--pod-network-cidr=10.244.0.0/1610.0.2.15 是node1的地址,ip addr獲得它eth0的ip
a.master 節(jié)點(diǎn)初始化 失敗
k8s報(bào)錯(cuò):this Docker version is not on the list of validated versions: 20.10.3. Latest validated version: 19.03,
那就是版本過(guò)高了,沒(méi)有k8s要求就默認(rèn)裝了。
https://www.jianshu.com/p/3178f20ee792
安裝了docker 內(nèi)核,
查看可用內(nèi)核
設(shè)置開(kāi)機(jī)從新內(nèi)核啟動(dòng)
grub2-set-default “CentOS Linux (5.4.144-1.el7.elrepo.x86_64) 7 (Core)”
查看內(nèi)核啟動(dòng)項(xiàng)
grub2-editenv list
重啟系統(tǒng)使內(nèi)核生效
reboot
查看內(nèi)核版本是否生效
uname -r
systemctl start docker.service
kubeadm init \--apiserver-advertise-address=10.0.2.15 \--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \--kubernetes-version v1.17.3 \--service-cidr=10.96.0.0/16 \--pod-network-cidr=10.244.0.0/16由于默認(rèn)拉取鏡像地址 k8s.gcr.io 國(guó)內(nèi)無(wú)法訪(fǎng)問(wèn),這里指定阿里云鏡像倉(cāng)庫(kù)地址。可以手動(dòng)
按照我們的 images.sh 先拉取鏡像,
地址變?yōu)?registry.aliyuncs.com/google_containers 也可以。
科普:無(wú)類(lèi)別域間路由(Classless Inter-Domain Routing、CIDR)是一個(gè)用于給用戶(hù)分配 IP
地址以及在互聯(lián)網(wǎng)上有效地路由 IP 數(shù)據(jù)包的對(duì) IP 地址進(jìn)行歸類(lèi)的方法。
拉取可能失敗,需要下載鏡像。
運(yùn)行完成提前復(fù)制:加入集群的令牌
a.To start using your cluster, you need to run the following as a regular user
執(zhí)行命令
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configb.You should now deploy a pod network to the cluster.
Run “kubectl apply -f [podnetwork].yaml” with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
c.Then you can join any number of worker nodes by running the following on each as root:
等會(huì)在node2,node3執(zhí)行它,把他加入node1節(jié)點(diǎn),即把node1作為master,node2、node3作為slaver節(jié)點(diǎn)(從節(jié)點(diǎn))
保存它,
2.4、部署 k8s-master、安裝 Pod 網(wǎng)絡(luò)插件(CNI)
直接使用k8s提供的kube-flannel.yml
應(yīng)用flannel網(wǎng)絡(luò)
kubectl apply -f kube-flannel.yml
獲取所有名稱(chēng)空間
kubectl get ns
獲取所有名稱(chēng)空間的pods
kubectl get pods --all-namespaces
獲取kube的使用節(jié)點(diǎn),
kubectl get nodes
1).把其他節(jié)點(diǎn)添加到master
其他節(jié)點(diǎn),如node2,node3,
在node2,node3,執(zhí)行
注意:ip為node1的eth0的ip,命令為2.3的1的3)的c的結(jié)果
問(wèn)題:添加節(jié)點(diǎn)時(shí),token 過(guò)期怎么辦
在node1執(zhí)行
kubeadm token create --print-join-command
kubeadm token create --ttl 0 --print-join-command
獲得一串代碼
再node2、node3等其他節(jié)點(diǎn)執(zhí)行,把節(jié)點(diǎn)添加到node1的master里
問(wèn)題:把其他節(jié)點(diǎn)添加到master,失敗
看master初始化失敗的內(nèi)容,2.3 --> 1—>3)------>a
給每個(gè)slaver安裝內(nèi)核,
啟動(dòng)docker
再運(yùn)行
解決: k8s節(jié)點(diǎn)處于 Init:ImagePullBackOff
K8S應(yīng)用FLANNEL失敗解決INIT:IMAGEPULLBACKOFF
下載flannel:v0.12.0-amd64導(dǎo)入到docker中
可以去https://github.com/coreos/flannel/releases官方倉(cāng)庫(kù)下載鏡像
把他放到 master,slaver1,slaver2的root下
加載它
,等一會(huì)后,再看master,節(jié)點(diǎn)全為running
監(jiān)控 pod 進(jìn)度
在master即node1執(zhí)行,監(jiān)控 pod 進(jìn)度
kubectl get pod -n kube-system -o wide等 3-10 分鐘,完全都是 running 以后使用 kubectl get nodes 檢查狀態(tài)
查看節(jié)點(diǎn)初始化狀態(tài)
查看pod狀態(tài)
kubectl get pod -n kube-system -o wide
查看節(jié)點(diǎn)初始化狀態(tài)
如kube-flannel-ds-amd64-89z7w
kubectl describe pod kube-flannel-ds-amd64-89z7w -n kube-system
可以看到,還在拉取鏡像。。。
查看master的所有節(jié)點(diǎn)
在master即node1,可以查看添加到master的所有節(jié)點(diǎn)
kubectl get nodes
當(dāng)狀態(tài)時(shí)ready,說(shuō)明集群環(huán)境搭建成功
初始化master失敗,
找不到kubeadm 的版本
借鑒
1
2
3
總結(jié)
- 上一篇: win10下安装deepin双系统的坑:
- 下一篇: 查询最后一次消费记录