当前位置:   article > 正文

[云原生]三、Kubernetes(1.18)

[云原生]三、Kubernetes(1.18)

主要内容:

1、kubernetes 简介
2、kubernetes 集群搭建
         方式搭建
         二进制方式搭建
3、 kubeadm kubernetes 核心技术
         YAML 文件详解
         kubectl 命令工具
         Pod
         Label
         Controller 控制器
         Volume
         PVC 和 PV
         Secret 和 configMap
         Namespace
         Service
         探针
         调度器
         集群安装机制 RBAC
         Helm
4、部署性能监控平台
5、搭建 kubernetes 高可用集群
6、kubernetes 部署项目
         Kubernete平台部署Java项目

1. kubernetes 简介

1.1 kubernetes 基本介绍

        kubernetes,简称 K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。
        传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
        新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署, 由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
        容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在 build 或 release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”, 这更便于监控和管理。
        Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的 管理、发现、访问 ,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

1.2 kubernetes 功能和架构

1.2.1 概述

        Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes 能够进行应用的自动化部署和扩缩容。在 Kubernetes 中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes 积累了作为 Google 生产环境运行工作负载 10 多年的经验,并吸收了来自于社区的最佳想法和实践。

1.2.2 K8s 功能:

(1)自动装箱
        基于容器对应用运行环境的资源配置要求自动部署应用容器
(2)自我修复(自愈能力)
        当容器失败时,会对容器进行重启
        当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
(3)水平扩展
        通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
(3)服务发现
        用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡
(4)滚动更新
        可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
(5)版本回退
        可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
(6)密钥和配置管理
        在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
(7)存储编排
        自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
(8)批处理
        提供一次性任务,定时任务;满足批量数据处理和分析的场景

1.2.3 应用部署架构分类

(1) 无中心节点架构
        GlusterFS
(2) 有中心节点架构
        HDFS
        K8S

1.2.4 k8s 集群架构

1.2.5 k8s 集群架构节点角色功能

Master Node
        k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;
        Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和
Controller MangerServer 所组成
Worker Node
        集群工作节点,运行用户业务应用容器;
        Worker Node 包含 kubelet、kube proxy 和 ContainerRuntime;
       

2. kubernetes 集群搭建

2.1 K8S集群搭建 -- kubeadm方式

2.1.1 前置知识点

目前生产部署 Kubernetes 集群主要有两种方式:
(1)kubeadm
        Kubeadm 是一个 K8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。
        官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
(2)二进制包
        从 github 下载发行版的二进制包,手动部署每个组件,组成 Kubernetes 集群。Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署 Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

2.1.2 kubeadm 部署方式介绍

        kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通过两条指令完成一个 kubernetes 集群的部署:
        第一、创建一个 Master 节点 kubeadm init
        第二, 将 Node 节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口 >

2.1.3 安装要求

在开始之前,部署 Kubernetes 集群机器需要满足以下几个条件:
        - 一台或多台机器,操作系统 CentOS7.x-86_x64
        - 硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
        - 集群中所有机器之间网络互通
        - 可以访问外网,需要拉取镜像
        - 禁止 swap 分区

2.1.4 最终目标

(1)在所有节点上安装 Docker 和 kubeadm
(2)部署 Kubernetes Master
(3)部署容器网络插件
(4)部署 Kubernetes Node,将节点加入 Kubernetes 集群中
(5)部署 Dashboard Web 页面,可视化查看 Kubernetes 资源
        

2.1.5 准备环境

2.1.6 系统初始化

 1. 关闭防火墙
  1. $ systemctl stop firewalld
  2. $ systemctl disable firewalld
2. 关闭 selinux:
  1. $ sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
  2. $ setenforce 0 # 临时
  3. 可以使用以下命令来检查当前系统中 SELinux 的状态是否开启:
  4. ```bash
  5. sestatus
  6. ```
  7. 通过运行上述命令,您将能够查看 SELinux 的当前状态,
  8. 包括是否为 enforcing(强制执行)、permissive(宽容)或 disabled(禁用)。
3. 关闭 swap:
  1. $ swapoff -a # 临时
  2. $ vim /etc/fstab # 永久
  3. $ swapon # 开启
  4. $ swapon --show 查看

4. 修改主机名:
  1. $ hostnamectl set-hostname <hostname>
  2. 或者
  3. $ vim /etc/hostname
5. 在 master 添加 hosts:
  1. $ cat >> /etc/hosts << EOF
  2. 192.168.31.61 k8s-master
  3. 192.168.31.62 k8s-node1
  4. 192.168.31.63 k8s-node2
  5. EOF
6. 将桥接的 IPv4 流量传递到 iptables 的链:
  1. $ cat > /etc/sysctl.d/k8s.conf << EOF
  2. net.bridge.bridge-nf-call-ip6tables = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. net.ipv4.ip_forward = 1
  5. vm.swappiness = 0
  6. EOF
  7. $ sysctl --system 生效
  8. 这段配置主要用于配置网络桥的网络过滤功能,对于 Kubernetes 等容器化平台来说是必要的设置。具体来说,这段配置指定了两个参数:
  9. 1. `net.bridge.bridge-nf-call-ip6tables = 1`:这个参数指示内核在桥接网络数据包到 IPv6 地址时,调用 IP6tables 进行数据包过滤。
  10. 2. `net.bridge.bridge-nf-call-iptables = 1`:这个参数指示内核在桥接网络数据包到 IPv4 地址时,调用 iptables 进行数据包过滤。
  11. 这些参数的设置对于 Kubernetes 等容器平台非常重要,以确保网络的正确和安全运行。通过将这些参数设置为1,可以确保桥接网络数据包按照规则进行过滤,以帮助保护容器网络的安全性和稳定性。
  12. 在设置完成后,通过运行 `sysctl --system` 命令可以使这些配置立即生效。这样一来,你的系统就会按照配置中指定的参数来处理桥接网络数据包的过滤。

这些配置参数的含义是:

  1. net.bridge.bridge-nf-call-ip6tables = 1:当通过桥接网络接收到IPv6数据包时,将调用ip6tables的规则进行处理。
  2. net.bridge.bridge-nf-call-iptables = 1:当通过桥接网络接收到IPv4数据包时,将调用iptables的规则进行处理。
  3. net.ipv4.ip_forward = 1:允许IPv4的数据包转发,即使数据包的目标不是本机。
  4. vm.swappiness = 0: vm.swappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。

        Kubernetes通过iptables实现服务发现和网络流量路由,pod通信。这一步很重要。没有设置的话会导致集群网络通信故障,如pod无法通信。

7. 时间同步:
  1. $ yum install ntpdate -y
  2. $ ntpdate time.windows.com
  3. 使用以前请先ping相应的域名查看网络是否可达,和相应的访问速度
  4. ntp.ntsc.ac.cn   中国国家授时中心
  5. cn.ntp.org.cn    中国授时
  6. 阿里云NTP时间源服务器
  7. ntp1.aliyun.com
  8. ntp2.aliyun.com
  9. ntp3.aliyun.com
  10. ntp4.aliyun.com
  11. ntp5.aliyun.com
  12. ntp6.aliyun.com
  13. ntp7.aliyun.com
  14. 国内一些大学NTP时间源服务器
  15. s1a.time.edu.cn   北京邮电大学
  16. s1b.time.edu.cn   清华大学
  17. s1c.time.edu.cn   北京大学
  18. s1d.time.edu.cn   东南大学
  19. s1e.time.edu.cn   清华大学
  20. s2a.time.edu.cn   清华大学
  21. s2b.time.edu.cn   清华大学
  22. s2c.time.edu.cn   北京邮电大学
  23. s2d.time.edu.cn   西南地区网络中心
  24. s2e.time.edu.cn   西北地区网络中心
  25. s2f.time.edu.cn   东北地区网络中心
  26. s2g.time.edu.cn   华东南地区网络中心
  27. s2h.time.edu.cn   四川大学网络管理中心
  28. s2j.time.edu.cn   大连理工大学网络中心
  29. s2k.time.edu.cn   CERNET桂林主节点
  30. s2m.time.edu.cn   北京大学
  31. 另外,如果服务器在国外,苹果提供的公共NTP服务,以下7个域名
  32. http://time1.apple.com
  33. http://time2.apple.com
  34. http://time3.apple.com
  35. http://time4.apple.com
  36. http://time5.apple.com
  37. http://time6.apple.com
  38. http://time7.apple.com
  39. Google(谷歌)提供的NTP服务,以下4个域名
  40. http://time1.google.com
  41. http://time2.google.com
  42. http://time3.google.com
  43. http://time4.google.com

2.1.7 所有节点安装 Docker/kubeadm/kubelet

阿里云教程:

kubernetes镜像_kubernetes下载地址_kubernetes安装教程-阿里巴巴开源镜像站 (aliyun.com)

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。
(1)安装 Docker
  1. # 移除旧版本docker
  2. sudo yum remove docker \
  3. docker-client \
  4. docker-client-latest \
  5. docker-common \
  6. docker-latest \
  7. docker-latest-logrotate \
  8. docker-logrotate \
  9. docker-eng
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/928440
推荐阅读
相关标签
  

闽ICP备14008679号