集群篇-k8s介绍
@[TOC]集群篇-k8s介紹
一、集群業(yè)務介紹
集群篇: 服務器的搭建、集群的管理、運維
1.集群業(yè)務介紹
集群:k8s及自動化部署,服務器的預警監(jiān)控功能
二、k8s 集群部署
K8S部署&DevOps ,百度云地址 提取碼 1111
1.k8s 快速入門
1).Kubernetes 是什么?
Kubernetes 簡稱 k8s。是用于自動部署,擴展和管理容器化應用程序的開源系統(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.部署方式的進化
https://kubernetes.io/zh/docs/concepts/overview/
b. Kubernetes的功能:
服務發(fā)現(xiàn)和負載均衡、存儲編排、自動部署和回滾、自動完成裝箱計算、自我修復、密鑰與配置管理
它僅僅是幫我們部署、管理集群的
c. Kubernetes 不是什么
不限制支持的應用程序類型
不部署源代碼、也不構(gòu)建你的應用程序
不提供應用程序級別的服務作為內(nèi)置服務
不要求日志記錄、監(jiān)視或警報解決方案
不提供或不要求配置語言/系統(tǒng)
不提供也不采用任何全面的機器配置、維護、管理或自我修復系統(tǒng)
Kubernetes 不僅僅是一個編排系統(tǒng),實際上它消除了編排的需要
d. Kubernetes 可以做的工作
Kubernetes :調(diào)度、自動恢復、水平伸縮
調(diào)度:服務的調(diào)度
自動恢復:發(fā)現(xiàn)某個服務器(節(jié)點)不響應,Kubernetes 可以自動把應用轉(zhuǎn)移恢復到另外一個服務器上,從另一服務器上拉起這個應用。那么,這個應用還能照常工作。
水平伸縮:比如黃色應用太忙,超過了業(yè)務負載。Kubernetes 檢查到此狀態(tài),可以將這個非常忙的應用直接復制到多臺服務器。所以可以自動伸縮。包括如果應用閑了,不需要這么多資源,可以把多余應用剔除掉,保持最新的狀態(tài)。
Kubernetes 就是一個分布式編排系統(tǒng),管理分布式系統(tǒng)的。
2).架構(gòu)
Kubernetes 組件
Master 組件:主組件
Node 組件:節(jié)點組件
Kubernetes 最小單元是一個pod,多個pod組成service。每一個pod就是多個容器。
1、整體主從方式
2、Master 節(jié)點架構(gòu)
3、Node 節(jié)點架構(gòu)
3).概念
2、k8s 集群安裝
2.1、環(huán)境準備
1、準備工作
網(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.啟動三個虛擬機
在.高可用集群篇(架構(gòu)師提升篇)\資料源碼\docs\code下找到k8s文件夾,
k8s 百度云地址 提取碼 1111https://pan.baidu.com/s/1e-WtkRjgS7UXVBWgYyuDcw
a.啟動三個虛擬機
在k8s文件夾,進入cmd模式
創(chuàng)建3個虛擬機:
創(chuàng)建成功:查看結(jié)果
ip為
192.168.56.100
192.168.56.101
192.168.56.102
b.開啟 root 的密碼訪問權(quán)限。
使用連接虛擬機:
cmd執(zhí)行命令
切換到root,密碼vagrant
su root 密碼:vagrant開啟 root 的密碼訪問權(quán)限
vi /etc/ssh/sshd_config 修改 PasswordAuthentication yes 重啟服務 service sshd restart重復以上步驟:
執(zhí)行2次exit退出,在執(zhí)行命令:
修改k8s-node2、k8s-node3
c.使用xshell連接虛擬機
d.設(shè)置虛擬機網(wǎng)絡環(huán)境- - -NET網(wǎng)絡網(wǎng)卡
查看默認網(wǎng)卡
ip route show,默認為eth0
查看ip
不使用網(wǎng)絡地址轉(zhuǎn)換,怎么修改??
怎么修改?
創(chuàng)建NET網(wǎng)絡網(wǎng)卡
為每個虛擬機 配置網(wǎng)絡為NET網(wǎng)絡
測試
虛擬機相互ping,再ping外網(wǎng)如百度
3.設(shè)置 linux 環(huán)境(三個節(jié)點都執(zhí)行)
1).關(guān)閉防火墻:
systemctl stop firewalld systemctl disable firewalld2).關(guān)閉 selinux:(selinux為linux默認的安全策略)
sed -i 's/enforcing/disabled/' /etc/selinux/config禁掉當前會話
setenforce 03).關(guān)閉 swap:(關(guān)閉內(nèi)存交換)
swapoff -a 臨時
永久
sed -ri 's/.*swap.*/#&/' /etc/fstab驗證,swap 必須為 0;
free -g4).添加主機名與 IP 對應關(guān)系
- 通過hostname,查看主機名稱
- 通過ip addr,查看eth0的ip
即/etc/hosts 文件
vi /etc/hosts
ip 為ip addr,獲取node1、node2、node3的ip
5).將橋接的 IPv4 流量傳遞到 iptables 的鏈:三個虛擬機都執(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)應用此規(guī)則
sysctl --system
6).備份虛擬機
三個虛擬機都備份
2.2、所有節(jié)點 安裝 Docker、kubeadm、kubelet、kubectl
Docker:Kubernetes 默認 CRI(容器運行時)為 Docker,因此先安裝 Docker
kubeadm:使用kubeadm,使集群部署簡單
kubelet:kubelet是每一個node節(jié)點上的代理,幫我們干活。
kubectl:通過命令行來操作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
安裝必須的依賴
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問題:找不到docker-ce docker-ce-cli containerd.io
解決:上面問題
更換一下鏡像倉庫,更換成阿里云鏡像倉庫
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo重新運行安裝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問題:重啟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測試:
docker 安裝成功
4)、啟動 docker & 設(shè)置 docker 開機自啟
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é)點初始化
1).修改node1為master,使用 ip addr 獲得它的默認網(wǎng)卡eth0的ip
2).按照我們的 images.sh 先拉取鏡像
找到k8s文件夾,把k8s文件夾上傳到node1的root下
切換達到k8s目錄
修改master_images.sh的權(quán)限
執(zhí)行master_images.sh,下載鏡像
./master_images.sh
查看下載的鏡像
docker images
3).master 節(jié)點初始化
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é)點初始化 失敗
k8s報錯:this Docker version is not on the list of validated versions: 20.10.3. Latest validated version: 19.03,
那就是版本過高了,沒有k8s要求就默認裝了。
https://www.jianshu.com/p/3178f20ee792
安裝了docker 內(nèi)核,
查看可用內(nèi)核
設(shè)置開機從新內(nèi)核啟動
grub2-set-default “CentOS Linux (5.4.144-1.el7.elrepo.x86_64) 7 (Core)”
查看內(nèi)核啟動項
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由于默認拉取鏡像地址 k8s.gcr.io 國內(nèi)無法訪問,這里指定阿里云鏡像倉庫地址。可以手動
按照我們的 images.sh 先拉取鏡像,
地址變?yōu)?registry.aliyuncs.com/google_containers 也可以。
科普:無類別域間路由(Classless Inter-Domain Routing、CIDR)是一個用于給用戶分配 IP
地址以及在互聯(lián)網(wǎng)上有效地路由 IP 數(shù)據(jù)包的對 IP 地址進行歸類的方法。
拉取可能失敗,需要下載鏡像。
運行完成提前復制:加入集群的令牌
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:
等會在node2,node3執(zhí)行它,把他加入node1節(jié)點,即把node1作為master,node2、node3作為slaver節(jié)點(從節(jié)點)
保存它,
2.4、部署 k8s-master、安裝 Pod 網(wǎng)絡插件(CNI)
直接使用k8s提供的kube-flannel.yml
應用flannel網(wǎng)絡
kubectl apply -f kube-flannel.yml
獲取所有名稱空間
kubectl get ns
獲取所有名稱空間的pods
kubectl get pods --all-namespaces
獲取kube的使用節(jié)點,
kubectl get nodes
1).把其他節(jié)點添加到master
其他節(jié)點,如node2,node3,
在node2,node3,執(zhí)行
注意:ip為node1的eth0的ip,命令為2.3的1的3)的c的結(jié)果
問題:添加節(jié)點時,token 過期怎么辦
在node1執(zhí)行
kubeadm token create --print-join-command
kubeadm token create --ttl 0 --print-join-command
獲得一串代碼
再node2、node3等其他節(jié)點執(zhí)行,把節(jié)點添加到node1的master里
問題:把其他節(jié)點添加到master,失敗
看master初始化失敗的內(nèi)容,2.3 --> 1—>3)------>a
給每個slaver安裝內(nèi)核,
啟動docker
再運行
解決: k8s節(jié)點處于 Init:ImagePullBackOff
K8S應用FLANNEL失敗解決INIT:IMAGEPULLBACKOFF
下載flannel:v0.12.0-amd64導入到docker中
可以去https://github.com/coreos/flannel/releases官方倉庫下載鏡像
把他放到 master,slaver1,slaver2的root下
加載它
,等一會后,再看master,節(jié)點全為running
監(jiān)控 pod 進度
在master即node1執(zhí)行,監(jiān)控 pod 進度
kubectl get pod -n kube-system -o wide等 3-10 分鐘,完全都是 running 以后使用 kubectl get nodes 檢查狀態(tài)
查看節(jié)點初始化狀態(tài)
查看pod狀態(tài)
kubectl get pod -n kube-system -o wide
查看節(jié)點初始化狀態(tài)
如kube-flannel-ds-amd64-89z7w
kubectl describe pod kube-flannel-ds-amd64-89z7w -n kube-system
可以看到,還在拉取鏡像。。。
查看master的所有節(jié)點
在master即node1,可以查看添加到master的所有節(jié)點
kubectl get nodes
當狀態(tài)時ready,說明集群環(huán)境搭建成功
初始化master失敗,
找不到kubeadm 的版本
借鑒
1
2
3
總結(jié)
- 上一篇: win10下安装deepin双系统的坑:
- 下一篇: 查询最后一次消费记录