当前位置:   article > 正文

k8s二进制安装部署超超详细指南

k8s二进制安装部署超超详细指南

概念

什么是k8s

K8s是一组服务器集群 
K8s所管理的集群节点上的容器
  • 1
  • 2

K8s的功能

+ 自我修复:如果物理机上的容器故障或者物理机宕机,k8s会自动在其他机器启动容器
+ 弹性伸缩:实时根据服务器的并发情况增加或者缩减容器数量
+ 自动部署和回滚:使用yaml文件实现自动部署
+ 服务发现和负载均衡
+ 机密和配置共享管理
+ 储存编排
+ 批处理
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

k8s集群架构

k8s集群架构

  • K8s集群分为两类节点:Master Node主节点 ,Worker Node工作节点
    • Master节点的组件(服务程序):
      • apiserver:接收客户端操作k8s的命令
      • Schduler:从后端的多个worker中找到一个节点
      • Controller Manager:控制后端节点Kubelet启动docker容器的程序
      • Etcd数据库:K8s的数据库,用于注册节点、服务、记录账号、记录名称解析等
    • Node节点组件:
      • Kubelet:像docker发送指令,管理docker容器
      • Kubeproxy:管理docker容器的网络,分配ip暴露端口等
    • Pod:
      • 就是一组容器打包之后的一个集合称之为pod(容器组),是k8s调度的最小单元,一个pod中可以有一个或者多个容器,pod是短暂的,运行完就消失
        K8s不能直接启动容器
    • Controllers:
      • 控制器,用于控制pod,启动,停止、删除pod,控制器类型比较多
    • Service:
      • 用于关联一组pod,防止pod失联,pod在运行过程中会动态的销毁和创建,导致pod的ip会改变,由service在最上层,提供统一的入口,即使pod信息改变,统一的入口也不会变化,可以保证用户访问得了,更新各个组件的信息,保证实时能够链接得上。
        在这里插入图片描述
    • Label:
      • 想要关联一组pod就需要给每一个pod打标签
    • Namespace:
      • 命名空间,默认情况下,一个k8s集群下的pod是可以互相访问的,实现业务的隔离,为不同的公司提供隔离的pod运行环境;为开发、测试、生产环境分别准备不同的名称空间进行业务隔离。

K8s部署步骤

集群结构

在这里插入图片描述

  • 生产环境:
    • Master节点必须实现高可用,避免单机故障,生产环境绝对不允许出现单点故障 (建议三台)
    • Etcd也要求有三个节点(必须,必须是奇数,为了解决选举问题)
    • Worker越多越好
  • 测试环境:
    在这里插入图片描述
先部署为单master再升级多maste
  • 1

在这里插入图片描述
在这里插入图片描述

实验环境规划

三个节点(2G内存 2核CPU)
在这里插入图片描述

  • Minikube:只能体验一下k8s,没有其他作用
  • Kubeadm:不清楚做了什么
  • 二进制:比较复杂,要改很多配置文件

部署单master集群

集群规划:

master:
主机名:k8s-master1
IP:193.168.10.63
Worker1:
主机名:k8s-node1
IP:193.168.10.65
Worker2:
主机名:k8s-node1
IP:193.168.10.66
K8s版本:1.16
安装方式:离线二进制
操作系统:centos7.7(1904)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

初始化服务器

关闭防火墙(所有节点都执行)
	systemctl stop firewalld
	systemctl disable firewalld
  • 1
  • 2
关闭selinux(所有节点都执行)
	先临时关闭selinux:
	setenforce 0  #如果没有打印信息就代表已经关闭了
	vim /etc/selinux/config #编辑这个文件 设置disabled
	SELINUX=disabled
  • 1
  • 2
  • 3
  • 4
配置主机名称(所有节点都执行)
	hostnamectl set-hostname k8s-master1
	hostnamectl set-hostname k8s-node1
	hostnamectl set-hostname k8s-node2
	hostname #执行该命令确定名字改好
  • 1
  • 2
  • 3
  • 4
配置名称解析 host文件(所有节点都执行)
	vim /etc/hosts #将以下内容加入各个节点机器的hosts文件
	193.168.10.63 k8s-master1
	193.168.10.64 k8s-master2
	193.168.10.65 k8s-node1
	193.168.10.66 k8s-node2
  • 1
  • 2
  • 3
  • 4
  • 5
配置时间同步
选择一个节点作为服务端 剩下的作为客户端
使用master1作为时间服务器的服务端  其他节点作为时间服务器的客户端
 +++![在这里插入图片描述](https://img-blog.csdnimg.cn/20210709190142746.png)
  • 1
  • 2
  • 3
配置k8s-master1
 		 yum install chrony
		 vim /etc/chrony.config
  • 1
  • 2
  • 修改上游服务器
    在这里插入图片描述

对于master节点,使用自己的时间在集群内部完成时间同步,则把所有外部的server全部注释掉,添加一个127.0.0.1

  • 允许访问的网段
    在这里插入图片描述
  • 修改度量值
    在这里插入图片描述
  • 启动服务
		systemctl start chronyd
		systemctl enable chronyd
  • 1
  • 2
  • 确定服务
		ss -unl | grep 123
  • 1

在这里插入图片描述

配置客户端 node1 node2

安装时间同步 -> 修改配置文件 只用指定上游服务器
在这里插入图片描述

  • 启动服务
		systemctl start chronyd
		systemctl enable chronyd
  • 1
  • 2

注:客户端端口无所谓 查一下时间同步

  • 确定服务
		chronyc sources
		^*:时间已经同步
		^?:时间未同步
  • 1
  • 2
  • 3

在这里插入图片描述

关闭交换分区(会导致服务起不来)
		swapoff -a #临时关闭
  • 1
实现每次开机时候交换分区都关掉:
  • 1
		vim /etc/fstab #删除最后一行
  • 1

在这里插入图片描述

	确认交换分区关闭: free -m
  • 1
Swap:             0           0           0
  • 1

部署集群

所有节点和etcd通信都是基于https,则需要自签一个证书实现加密传输。
在这里插入图片描述

注:关于加密: 1:对称加密:用相同的密钥,在传输过程中,加密解密使用的密钥是相同的
2:非对称加密:加密解密过程中使用的是密钥对,分为公钥和私钥,发送使用公钥加密,只能使用与之对应的那一个私钥进行解密
3:单向加密:只管加密不管解密,md5等进行数据校验

  • Ssl:证书来源:
    • 网络第三方机构购买,一般用于外部用户访问使用
    • 自己给自己发:自签证书(也可以给外部,但是浏览器会提示证书不受信任)
    • 自建CA:
      1):使用openssl
      2):使用cfssl:让集群中的机器通过这个CA完成https的通信

CA:证书颁发机构

给etcd颁发证书

项目所需所有资料
链接:https://pan.baidu.com/s/15PfdIqns3PSfrWvgcwrn3A
提取码:0br6

将文件按图放置到master的家目录下
在这里插入图片描述
在这里插入图片描述

含有两个目录:

  • etcd:为etcd颁发证书使用
  • k8s:为k8s颁发证书使用
  • 执行cfssl.sh脚本
 ./cfssl.sh 
  • 1
  • 进入etcd目录
    • 修改server-csr.json(改要给哪几个主机的etcd颁发证书) 项目结构如下图
      在这里插入图片描述

master:
主机名:k8s-master1
IP:193.168.10.63
Worker1:
主机名:k8s-node1
IP:193.168.10.65
Worker2:
主机名:k8s-node1
IP:193.168.10.66

  • 修改结果(注意细节):
    在这里插入图片描述

    • 创建CA
      • 执行 generate_etcd_cert.sh 脚本
	cd ~/TSL
	./generate_etcd_cert.sh
  • 1
  • 2

在这里插入图片描述
会生成两个文件,可以理解为公钥和私钥,创建好ca后ca会先给自己颁发证书,要申请证书就要携带ca的密钥
在这里插入图片描述

  • 向CA申请证书
    脚本中的第二行命令即是颁发证书 ,所以现在有4个pem,两个ca的两个server的。(后面还需要给apiserver颁发证书,让worker和apiserver进行加密通信)

部署etcd

  • 需要三台虚拟机,在master node1 node2 上分别安装一个etcd(节省资源 可以自己试着让etcd独立出去)

部署主节点etcd

etcd的安装包在k8sFiles/etcd.tar.gz
在这里插入图片描述

  • 生成一个etcd服务管理脚本(实现systemd的启动和关闭),需要放置到systemd的服务管理脚本的默认目录下,(centos7: systemd服务管理脚本放置在:/usr/lib/systemd/system centos6:/etc/rc.d/rcN.d)(N:0,1,2,3,4,5,6linux运行级别)
		 mv etcd.service /usr/lib/systemd/system
  • 1
  • 安装文件目录
		mv etcd /opt/
  • 1
也可以放到其他位置,要修改etcd.service配置文件的位置和文件加start位置
  • 1
  • 修改etcd配置文件
	vim /opt/etcd/cfg/etcd.conf
  • 1

在这里插入图片描述
修改结果:
在这里插入图片描述

  • 将生成的证书放置到etcd的目录之中

使用\cp去除别名

	\cp 
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/825560
    推荐阅读
    相关标签
      

    闽ICP备14008679号