一个节点 是 一个服务器
k8s依赖docker
部署有报错,看报错日志,先不去百度,可能是之前的事情没有做
为什么要用k8s
docker上MySQL不运行了,怎么办
弹性扩容,缩容,流量暴增,减少,
docker没有弹性扩容,缩容
k8s应用场景有哪些
练习,建议3台服务器
一个master 多个node
kubernetes介绍
Kubernetes是Google在2014年开源的一款容器集群系统,简称k8s
Kubernetes用于容器化应用程序部署、扩展和管理,目标是让容器化应用简单高效
官方网站:https://kubernetes.io/
官方文档:https://kubernetes.io/zh/docs/home/
K8S是一组服务器的集群,对节点(node)上的容器进行管理。
主要提供了如下的主要功能:
1.自我修复:一旦某-个容器崩溃,能够在1秒中左右迅速启动新的容器
2.弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
3.服务发现:服务可以通过自动发现的形式找到它所依赖的服务
4.负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
5.版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
6.存储编排:可以根据容器自身的需求自动创建存储卷
1.自我修复:一旦某-个容器崩溃,能够在1秒中左右迅速启动新的容器,在k8s集群中
如果某个容器宕机了,会迅速启动一台新的nginx容器。
2.弹性伸缩:在k8s集群中有4台nginx容器,总共抗并发4000 如果突然并发量堆积6000-8000 迅速在k8s集群中 扩容容器 如果流量下降之后就会对我们的容器缩容
3.负载均衡:在k8s集群中 有n多个容器组成集群 通过负载均衡策略来实现访问
4.版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本 灰度发布
k8s 分成Master 负责整个k8s集群管理 node节点(工作)运行nginx
节点—服务器
先在服务器上安装k8s环境
自我修复,设定4个nginx,一个宕机了,k8s自动起一个
弹性伸缩,流量大了,自动调整
负载均衡,自动形式轮询访问nginx
k8s做灰度发布,不用写代码
k8s架构设计原理
kubernetes集群主要由控制节点(Master)、工作节点(Node)组成
Master负责集群管理,决定nginx到底在哪个节点
工作节点(Node)真正运行nginx
节点是一个独立服务器
运行nginx,在master上运行命令
k8s集群环境演示架构设计原理
最小节点是pod
运行nginx,要计算。controller通知给要工作的节点node,node工作节点运行一个docker容器。变成pod
一个pod里面可以有多个容器,
访问nginx,node节点上的kube
k8s搭建环境
不是单机
必须一个master,2个node,节点是服务器
master是分配控制计算,
虚拟机克隆
注意:克隆了之后 记得一定要修改该linux服务器 mac地址
IP没有变就MAC多生成几次
环境准备
1.一个主多个工作节点: 一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境
2.多主节点多工作节点:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境
程序员初学练习,采用一主多从即可
ip地址 类型 操作系统 服务配置
192.168.75.163 Master Centos7.6 2核CPU 2G内存 20G硬盘
192.168.75.164 Node1 Centos7.6 2核CPU 2G内存 20G硬盘
192.168.75.165 Node2 Centos7.6 2核CPU 2G内存 20G硬盘
使用 XshellPortable.exe 远程连接到这三台服务器
初始化环境
需要在这三台服务器上执行以下操作:
1.检查操作系统的版本
#此方式下安装kubernetes集群要求Centos版本要在7.5或之上
cat /etc/redhat-release
2.主机名解析
为了方便后面集群节点间的直接调用,在这配置一下主机名解析, 企业中推荐使用内部DNS服务器
#主机名成解析编辑三台服务器的/etc/hosts文件,添加下面内容
vi /etc/hosts
改对了再复制
192.168.75.173 master
192.168.75.167 node1
192.168.75.175 node2
让后节点之间相互ping下
ping master
ping node1
ping node2
之后的不能错
3.时间同步
kubernetes要求集群中的节点时间必须精确一致, 这里直接使用chronyd服务从网络同步时间。
企业中建议配置内部的时间同步服务器
yum install -y chrony
systemctl start chronyd
systemctl enable chronyd
4.禁用iptables和firewalld服务
kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
关闭防火墙,不然开放端口麻烦
# 1关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld# 2关闭iptables服务
[root@master ~]# systemctl disabled iptables
[root@master ~]# systemctl disable iptables
5.关闭selinux 千万不能错
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
vi /etc/selinux/config 文件,修改SELINUX的值为disabled
#注意修改完毕之后需要重启 linux服务
SELINUX=disabled
改成
6.禁用swap分区
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用
启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备
但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
#编辑分区配置文件/etc/fstab,注释掉swap分区一行
vi /etc/fstab
7.修改Linux内核参数
#修改linux的内核参数,添加网桥过滤和地址转发功能
vi /etc/sysctl.d/kubernetes.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
#重新加载配置
[root@mayikt ~]# sysctl -p
#加载网桥过滤模块
[root@mayikt ~]# modprobe br_netfilter
#查看网桥过滤模块是否加载成功
[root@mayikt ~]# lsmod | grep br_netfilter
8.配置ipvs功能
在kubernetes中service有两种代理模型,-种是基于iptables的, - -种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
k8s service 会使用 ipvs/iptables
# 1安装ipset和ipvsadm
[root@mayikt ~]# yum install ipset ipvsadmin -y# 2添加需要加载的模块写入脚本文件
[ root@mayikt ~]# cat <<EOF > /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# 3为脚本文件添加执行权限
[root@mayikt ~]# chmod +x /etc/sysconfig/modules/ipvs.modules# 4执行脚本文件
[root@mayikt ~]# sh +x /etc/sysconfig/modules/ipvs.modules# 5查看对应的模块是否加载成功
[root@mayikt ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
9.重启Linux系统
reboot
安装kubernetes
安装docker
# 1切换镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo如果报错 -bash: wget: 未找到命令
则执行: yum -y install wget
# 2查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates# 3安装特定版本的docker-ce
#指定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y# 4添加一个配置文件 阿里云加速镜像
[root@master ~]# mkdir /etc/docker
[ root@master ~]# cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [ "https://66mzqrih.mirror.aliyuncs.com"]
}
EOF# 5启动docker
[root@master ~]# systemctl start docker
[root@master ~]# systemctl enable docker# 6检查docker状态和版本
[root@master ~]# docker --version
安装kubernetes组件
#1.由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源
#2.vi /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.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg#3.安装kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
#4.配置kubelet的cgroup
#5.vi /etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"#6.设置kubelet开机自启
[root@master ~]# systemctl enable kubelet