@[TOC]集群篇-k8s介绍

一、集群业务介绍

集群篇: 服务器的搭建、集群的管理、运维

1.集群业务介绍

在这里插入图片描述
集群:k8s及自动化部署,服务器的预警监控功能

二、k8s 集群部署

K8S部署&DevOps ,百度云地址 提取码 1111

1.k8s 快速入门

1).Kubernetes 是什么?

Kubernetes 简称 k8s。是用于自动部署,扩展和管理容器化应用程序的开源系统。
中文官网:https://kubernetes.io/zh/
中文社区:https://www.kubernetes.org.cn/
官方文档:https://kubernetes.io/zh/docs/home/ 笔记的版本是1.7.1
社区文档:http://docs.kubernetes.org.cn/

a.部署方式的进化

在这里插入图片描述
https://kubernetes.io/zh/docs/concepts/overview/
在这里插入图片描述

b. Kubernetes的功能:

服务发现和负载均衡、存储编排、自动部署和回滚、自动完成装箱计算、自我修复、密钥与配置管理

它仅仅是帮我们部署、管理集群的

c. Kubernetes 不是什么

不限制支持的应用程序类型
不部署源代码、也不构建你的应用程序
不提供应用程序级别的服务作为内置服务
不要求日志记录、监视或警报解决方案
不提供或不要求配置语言/系统
不提供也不采用任何全面的机器配置、维护、管理或自我修复系统
Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要

d. Kubernetes 可以做的工作

Kubernetes :调度、自动恢复、水平伸缩

在这里插入图片描述
调度:服务的调度
自动恢复:发现某个服务器(节点)不响应,Kubernetes 可以自动把应用转移恢复到另外一个服务器上,从另一服务器上拉起这个应用。那么,这个应用还能照常工作。
水平伸缩:比如黄色应用太忙,超过了业务负载。Kubernetes 检查到此状态,可以将这个非常忙的应用直接复制到多台服务器。所以可以自动伸缩。包括如果应用闲了,不需要这么多资源,可以把多余应用剔除掉,保持最新的状态。

Kubernetes 就是一个分布式编排系统,管理分布式系统的。

2).架构

Kubernetes 组件
Master 组件:主组件
Node 组件:节点组件

Kubernetes 最小单元是一个pod,多个pod组成service。每一个pod就是多个容器。

1、整体主从方式

在这里插入图片描述

2、Master 节点架构

在这里插入图片描述

3、Node 节点架构

在这里插入图片描述

3).概念

在这里插入图片描述

2、k8s 集群安装

2.1、环境准备

1、准备工作

网卡修改: 169.254.116.151 到 192.168.56.1
子网掩码修改:255.255.0.0 到 255.255.255.0
在这里插入图片描述
保存到 D:\software\VirtualBox VMs 在这里插入图片描述

2.启动三个虚拟机

在.高可用集群篇(架构师提升篇)\资料源码\docs\code下找到k8s文件夹,
k8s 百度云地址 提取码 1111https://pan.baidu.com/s/1e-WtkRjgS7UXVBWgYyuDcw

a.启动三个虚拟机

在k8s文件夹,进入cmd模式
创建3个虚拟机:

vagrant up 

在这里插入图片描述

创建成功:查看结果
在这里插入图片描述
ip为
192.168.56.100
192.168.56.101
192.168.56.102

b.开启 root 的密码访问权限。

使用连接虚拟机:
cmd执行命令

 vagrant ssh k8s-node1

切换到root,密码vagrant

su root
密码:vagrant

开启 root 的密码访问权限

vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes
重启服务 
service sshd restart

重复以上步骤:
执行2次exit退出,在执行命令:
修改k8s-node2、k8s-node3

c.使用xshell连接虚拟机

在这里插入图片描述

d.设置虚拟机网络环境- - -NET网络网卡

查看默认网卡
ip route show,默认为eth0
查看ip

ip addr 

在这里插入图片描述
不使用网络地址转换,怎么修改??
在这里插入图片描述
怎么修改?
创建NET网络网卡
在这里插入图片描述
为每个虚拟机 配置网络为NET网络
在这里插入图片描述
测试
虚拟机相互ping,再ping外网如百度

3.设置 linux 环境(三个节点都执行)
1).关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
2).关闭 selinux:(selinux为linux默认的安全策略)
sed -i 's/enforcing/disabled/' /etc/selinux/config

禁掉当前会话

setenforce 0
3).关闭 swap:(关闭内存交换)

swapoff -a 临时

永久

sed -ri 's/.*swap.*/#&/' /etc/fstab 

验证,swap 必须为 0;

free -g

在这里插入图片描述

4).添加主机名与 IP 对应关系
  • 通过hostname,查看主机名称
  • 通过ip addr,查看eth0的ip
    在这里插入图片描述
    即/etc/hosts 文件
    vi /etc/hosts
10.0.2.15 k8s-node1
10.0.2.22 k8s-node2
10.0.2.23 k8s-node3

ip 为ip addr,获取node1、node2、node3的ip
在这里插入图片描述

5).将桥接的 IPv4 流量传递到 iptables 的链:三个虚拟机都执行
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

在这里插入图片描述

让系统应用此规则
sysctl --system
在这里插入图片描述

6).备份虚拟机

三个虚拟机都备份
在这里插入图片描述

2.2、所有节点 安装 Docker、kubeadm、kubelet、kubectl

Docker:Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker
kubeadm:使用kubeadm,使集群部署简单
kubelet:kubelet是每一个node节点上的代理,帮我们干活。
kubectl:通过命令行来操作Kubernetes集群

1、安装 docker
1)、卸载系统之前的 docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2)、安装 Docker-CE

安装必须的依赖

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

设置 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失败

执行sudo systemctl restart docker,失败 在这里插入图片描述

解决:修改daemon.json

编辑/etc/docker/daemon.json

 vi /etc/docker/daemon.json

添加:

{"registry-mirrors":["https://registry.docker-cn.com"]}

再次执行----成功

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 安装成功

docker ps

在这里插入图片描述

4)、启动 docker & 设置 docker 开机自启
systemctl enable docker

在这里插入图片描述

2、添加阿里云 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
EOF
3、安装 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 kubelet

在这里插入图片描述

2.3、部署 k8s-master

1、master 节点初始化
1).修改node1为master,使用 ip addr 获得它的默认网卡eth0的ip

在这里插入图片描述

2).按照我们的 images.sh 先拉取镜像

找到k8s文件夹,把k8s文件夹上传到node1的root下

切换达到k8s目录
修改master_images.sh的权限

chmod 777 master_images.sh

在这里插入图片描述
执行master_images.sh,下载镜像
./master_images.sh
在这里插入图片描述
查看下载的镜像
docker images
在这里插入图片描述

3).master 节点初始化
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 

10.0.2.15 是node1的地址,ip addr获得它eth0的ip

a.master 节点初始化 失败

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 内核,

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt

cat /boot/grub2/grub.cfg |grep menuentry

查看可用内核
在这里插入代码片
设置开机从新内核启动
grub2-set-default “CentOS Linux (5.4.144-1.el7.elrepo.x86_64) 7 (Core)”
查看内核启动项
grub2-editenv list

重启系统使内核生效
reboot
查看内核版本是否生效
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 国内无法访问,这里指定阿里云镜像仓库地址。可以手动
按照我们的 images.sh 先拉取镜像,
地址变为 registry.aliyuncs.com/google_containers 也可以。
科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
拉取可能失败,需要下载镜像。
运行完成提前复制:加入集群的令牌
在这里插入图片描述

a.To start using your cluster, you need to run the following as a regular user

执行命令

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

在这里插入图片描述

b.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执行它,把他加入node1节点,即把node1作为master,node2、node3作为slaver节点(从节点)
保存它,

kubeadm join 10.0.2.15:6443 --token 1f6h2p.750s27k40diyvf14 \
    --discovery-token-ca-cert-hash sha256:161be0beb9dd6f80a02f4bd070703b80fcaf9201e880b80855d3a79f0df59a6e

2.4、部署 k8s-master、安装 Pod 网络插件(CNI)

直接使用k8s提供的kube-flannel.yml

应用flannel网络
kubectl apply -f kube-flannel.yml
在这里插入图片描述
获取所有名称空间
kubectl get ns
在这里插入图片描述
获取所有名称空间的pods
kubectl get pods --all-namespaces
在这里插入图片描述
获取kube的使用节点,
kubectl get nodes
在这里插入图片描述

1).把其他节点添加到master

其他节点,如node2,node3,

在node2,node3,执行
注意:ip为node1的eth0的ip,命令为2.3的1的3)的c的结果

kubeadm join 10.0.2.15:6443 --token blcnxp.dephwp5eapch86zm --discovery-token-ca-cert-hash sha256:e7e9d8043e69eb9fb010b3140c53d2b3c437837c002b7e1a3b1dc5947dad47a8

在这里插入图片描述

问题:添加节点时,token 过期怎么办

在node1执行
kubeadm token create --print-join-command
kubeadm token create --ttl 0 --print-join-command
获得一串代码
在这里插入图片描述
再node2、node3等其他节点执行,把节点添加到node1的master里
在这里插入图片描述

问题:把其他节点添加到master,失败

看master初始化失败的内容,2.3 --> 1—>3)------>a
给每个slaver安装内核,
启动docker
再运行

kubeadm join 10.0.2.15:6443 --token fw3if5.20rmsj77y5kmqrgv     --discovery-token-ca-cert-hash sha256:161be0beb9dd6f80a02f4bd070703b80fcaf9201e880b80855d3a79f0df59a6e 
解决: k8s节点处于 Init:ImagePullBackOff

在这里插入图片描述

K8S应用FLANNEL失败解决INIT:IMAGEPULLBACKOFF

下载flannel:v0.12.0-amd64导入到docker中
可以去https://github.com/coreos/flannel/releases官方仓库下载镜像
在这里插入图片描述
把他放到 master,slaver1,slaver2的root下
加载它

docker load < flanneld-v0.11.0-amd64.docker

在这里插入图片描述
,等一会后,再看master,节点全为running

docker images
 kubectl get pod -n kube-system

在这里插入图片描述

监控 pod 进度

在master即node1执行,监控 pod 进度

 kubectl get pod -n kube-system -o wide 

等 3-10 分钟,完全都是 running 以后使用 kubectl get nodes 检查状态
在这里插入图片描述

查看节点初始化状态

查看pod状态
kubectl get pod -n kube-system -o wide
在这里插入图片描述
查看节点初始化状态
如kube-flannel-ds-amd64-89z7w
kubectl describe pod kube-flannel-ds-amd64-89z7w -n kube-system

可以看到,还在拉取镜像。。。
在这里插入图片描述

查看master的所有节点

在master即node1,可以查看添加到master的所有节点

 kubectl get nodes

在这里插入图片描述
当状态时ready,说明集群环境搭建成功

初始化master失败,
找不到kubeadm 的版本

在这里插入图片描述

借鉴

1

2

3

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐