kubernetes环境搭建及部署

news2024/11/22 19:32:59

一、kubernetes 概述

1、kubernetes 基本介绍

        kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源 的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的 应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种 机制。

        传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配 置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等 操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于 可移植性。

        新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件 系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署, 由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进 行迁移。

         容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间 成一对一关系也使容器有更大优势,使用容器可以在 build 或 release 的阶段,为应用创 建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构, 这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”, 这更便于监控和管理。

        Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、 应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便 对应用请求进行负载均衡。

        在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通 过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需 要运维人员去进行复杂的手工配置和处理。

2、kubernetes 功能和架构

2.1、概述

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

2.2 、K8s 功能

(1)自动装箱

基于容器对应用运行环境的资源配置要求自动部署应用容器

(2)自我修复(自愈能力)

当容器失败时,会对容器进行重启

当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度

当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

(3)水平扩展

通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大 或规模剪裁

(4)服务发现

用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和 负载均衡

(5) 滚动更新

可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新

(6) 版本回退

可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退

(7)密钥和配置管理 在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

(8)存储编排 自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务

(9)批处理 提供一次性任务,定时任务;满足批量数据处理和分析的场景

2.3 、k8s 集群架构

2.4 、k8s 集群架构节点角色功能

Master Node

k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;

Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成。

Worker Node

集群工作节点,运行用户业务应用容器;

Worker Node 包含 kubelet、kube proxy 和 ContainerRuntime;

二、kubernetes 集群搭建(kubeadm方式)

2.1 、kubeadm 部署方式介绍

kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:

- 创建一个Master 节点kubeadm init

- 将Node 节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>

2.2、安装要求

在开始之前,部署Kubernetes 集群机器需要满足以下几个条件:

  • 1台以上机器,操作系统 CentOS7.x-64位系统
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像 禁止swap分区

2.3、最终目标

  • 在所有节点上安装Docker 和kubeadm
  • 部署Kubernetes Master
  • 所有节点上安装Docker和kubeadm,kubelet
  • 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
  • 部署 Dashboard Web 页面,可视化查看 Kubernetes资源

2.4、准备环境

 

角色         IP地址        组件                             

master01    192.30.93.1  docker,kubectl,kubeadm,kubelet

node01      192.30.93.2  docker,kubectl,kubeadm,kubelet

2.5、环境部署

2.6.1 检查操作系统的版本

此方式下安装kubernetes集群要求Centos版本要在7.5或之上

cat /etc/redhat-release

CentOS Linux release 7.9.2009 (Core)


2.6.2 关闭防火墙

kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

(1)关闭firewalld服务

       systemctl stop firewalld

        systemctl disable firewalld

(2)关闭iptables服务

        systemctl stop iptables

        systemctl disable iptables

2.6.3 关闭 selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题。

setenforce 0   #临时

sed -i 's/enforcing/disabled/' /etc/selinux/config   #永久

2.6.4 关闭 swap

    swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明。

swapoff -a # 临时

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

2.6.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

2.6.6 时间同步

kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间

企业中建议配置内部的会见同步服务器

systemctl start chronyd

systemctl enable chronyd

date

2.6.7安装docker

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

安装 Docker,系统已安装docker查看版本

2.6.8  安装Kubernetes组件

1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源

2、编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgchech=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

                         http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

3、安装kubeadm、kubelet和kubectl

yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0  -y --nogpgcheck

4、设置kubelet开机自启

[root@master ~]# systemctl enable kubelet

2.6.9  集群初始化

下面的操作只需要在master节点上执行即可

1、在 172.30.93.225(Master)执行

kubeadm init \

--apiserver-advertise-address=192.30.93.1 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version v1.17.4 \

--service-cidr=10.96.0.0/12 \

--pod-network-cidr=10.244.0.0/16

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。

执行完按照要求执行以下步骤

2、创建必要文件

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf  $HOME/.kube/config

sudo chown $(id -u):$(id -g)  $HOME/.kube/config

下面的操作只需要在node节点上执行即可

kubeadm join 192.30.93.1:6443 --token lcpklc.qstkss5lqi1ybell \

--discovery-token-ca-cert-hash sha256:82d9bff70d810f82f192683b7feba12660c1a30e5b919f1cf07a86fe3ccca25f

在master上查看节点信息

kubectl get node

2.6.10 安装 Pod 网络插件(CNI)

只在master节点操作即可

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

确保能够访问到 quay.io 这个 registery。如果 Pod 镜像下载失败,可以改这个镜像地址

2.6、集群测试

2.6.1 创建一个nginx服务

kubectl create deployment nginx  --image=nginx:1.14-alpine

2.6.2 暴露端口

kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort

2.6.3查看服务

kubectl get pod,svc

访问地址:http://NodeIP:Port

注意:如果只有一台机器 需要去除master上的污点,k8s默认master不工作

允许master节点部署pod

kubectl taint nodes --all node-role.kubernetes.io/master-

污点可选参数

      NoSchedule: 一定不能被调度

      PreferNoSchedule: 尽量不要调度

      NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

kubectl taint nodes master1 node-role.kubernetes.io/master=:PreferNoSchedule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/718137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】文件

文章目录 一. 什么是文件二. 文件路径三. 打开文件四. 关闭文件五. 写文件1. 清空写2. 追加写 六. 读文件1. 使用 read 方法读取2. 使用 for 循环按行读取3. 使用 readlines 方法读取整个文件的内容 七. 上下文管理器1. 什么是上下文管理器&#xff1f;2. 为什么要有上下文管理…

ESP8266模块MQTT AT Commands 发送 json字符串

ESP8266 wifi模块介绍 ESP8266EX 由乐鑫公司开发&#xff0c;提供了⼀套⾼度集成的 Wi-Fi SoC 解决⽅案&#xff0c;其低功耗、紧凑设计和⾼稳定性可以满⾜⽤户的需求。ESP8266EX 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能&#xff0c;既能够独⽴应⽤&#xff0c;也可以作为从机…

ORA-31664: unable to construct unique job name when defaulted

某个环境备份不足空间问题处理后&#xff0c;手动执行expdp备份的脚本&#xff0c;报错如下 Export: Release 11.2.0.4.0 - Production on Tue Jul 4 11:46:14 2023 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle D…

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)

【海量数据挖掘/数据分析】之 决策树模型&#xff08;决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例&#xff09; 目录 【海量数据挖掘/数据分析】之 决策树模型&#xff08;决策树模型、决策树构成、决策树常…

Windows环境部署MySQL_5.7的安装、测试连接以及卸载全过程实操手册

前言&#xff1a; 前面记录了双环境的oracle的安装卸载及相关测试评估&#xff0c;这里记录下 MySQL5.7社区免费版的部署手册。 什么是 MySQL MySQL 是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;目前属于Oracle 公司。MySQL 是一种关系型数…

window.open()实现PDF预览

效果图如下&#xff1a; 页面使用: window.open(strUrl) 参数说明如下图:

深度学习笔记之Transformer(四)铺垫:LayerNormalization

深度学习笔记之Transformer——LayerNormalization 引言回顾&#xff1a;批标准化问题描述问题处理 层标准化批标准化无法处理的问题 引言 在介绍 Transformer \text{Transformer} Transformer模型架构之前&#xff0c;首先介绍 Transformer \text{Transformer} Transformer的…

linux 环境下ElasticSearch 7.1.6.3、kibana-7.16.3安装

安装包放入百度网盘&#xff0c;自取 链接&#xff1a;https://pan.baidu.com/s/1Uh9pKFoaz9qi4CE4_GmlOA?pwdroky 提取码&#xff1a;roky 快速演示下安装操作&#xff1a; ElasticSearch 7.1.6.3&#xff1a; 1.上传至服务器相应目录下 我传到的/home目录下&#xff0…

0、技术选型

技术选型参考&#xff1a; 系统数据流程图 框架发行版本选型 1&#xff09;如何选择Apache/CDH/HDP版本&#xff1f; &#xff08;1&#xff09;Apache&#xff1a;运维麻烦&#xff0c;组件间兼容性需要自己调研。&#xff08;一般大厂使用&#xff0c;技术实力雄厚&#xf…

【随笔】jupyter notebook启动打开文件出现:500 : Internal Server Error

错误&#xff1a; 看log有 module ‘mistune’ has no attribute BlockGrammar’错误 打开文件有500 : Internal Server Error 解决方法&#xff1a; pip install --upgrade jupyterhub pip install --upgrade --user nbconvertconda环境可以&#xff1a; conda install nbc…

使用Python开发ChatGPT AI工具助手(ChatCatsy):4天快速开发指南

引言&#xff1a; ChatGPT是一种基于人工智能的对话生成模型&#xff0c;它可以用于开发聊天机器人、虚拟助手等应用。本教程将指导您在3天内使用Python开发一个ChatGPT AI工具助手。无需担心&#xff0c;即使您是初学者&#xff0c;也可以轻松跟随本指南完成项目。 第一天&a…

Java-数据结构(三)-List:ArrayList和LinkedList及其相关面试题

目录 一、引言二、ArrayList2.1 ArrayList是什么&#xff1f;2.2 ArrayList的历史由来2.3 ArrayList的使用好处2.4 ArrayList的底层原理2.5 ArrayList的操作方法及代码示例 三、LinkedList3.1 LinkedList是什么&#xff1f;3.2 LinkedList的历史由来3.3 LinkedList的使用好处3.…

攻防世界_web

robots 题目描述是这样的&#xff0c;虽然这是一道基础题&#xff0c;但我确实还没有了解过robots协议 第一次知道是被御剑给扫描出来的后台文件 这次直接访问看看 初级题就是初级题&#xff0c;访问后得到提示&#xff0c;如果没做过我估计还不知道该咋整&#xff0c;这也是一…

Squid 缓存代理(一)---原理及搭建(传统代理、透明代理)

前言 Squid 是 Linux 系 统 中 最 常 用 的 一 款 开 源 代 理 服 务 软 件 &#xff08; 官 方 网 站 为 http://www.squid-cache.org&#xff09;&#xff0c;可以很好地实现 HTTP 和 FTP&#xff0c;以及 DNS 查询、SSL 等应用的缓存代理。缓存代理作为应用层的代理服务软件…

C#(四十八)之StreamWriter StreamWriter使用方法及与FileStream类的区别

StreamReader类的属性&#xff1a; CurrentEncoding&#xff1a;获取流使用的字符编码 EndOfStream&#xff1a;指示当前位置是否在流的末尾 StreamReader类的方法&#xff1a; Read()&#xff1a;读取流中的下一个字符或下一组字符。 ReadBlock()&#xff1a;读取一个字符…

使用Maven对Scala独立应用程序进行编

任务描述 本关任务&#xff1a;使用Scala编写一个找出README.md文件中包含a的行数和包含b的行数的程序&#xff0c;并使用Maven对程序进行编译打包提交到Saprk上。 相关知识 在终端中执行如下命令创建一个文件夹 sparkapp3作为应用程序根目录&#xff1a; cd ~ # 进入用户主…

银河麒麟服务器v10 sp1 redis开机自动启动

接上一篇&#xff1a;银河麒麟服务器v10 sp1 安装 redis_csdn_aspnet的博客-CSDN博客 将redis_init_script文件复制到/etc/init.d下&#xff0c;重命名为redisd&#xff1a; rootxxx-pc:cp /usr/local/redis/redis-7.0.11/utils/redis_init_script /etc/init.d/redisd 内容如…

可视化网页设计工具 Blocs「Mac」

Blocs是一款用于网页设计和开发的可视化工具。它提供了一个直观且强大的界面&#xff0c;使用户可以轻松地创建精美的网页&#xff0c;而无需编写代码。 使用Blocs&#xff0c;您可以通过拖放元素、调整布局、编辑文本和图像等来构建网页。它提供了丰富的预设组件和模板&#x…

科幻大作【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址&#xff1a; https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型相关版本和参数配置&#xff1a; Model: GuoFeng3, Version: v1.2.0 迭代步数:30 采样方法:DPM 2M Karras 或者 DPM 2M SDE Karras3 宽高&#xff1a;10…

Kubernetes入门实战课-k8s实验环境

Kubernetes入门实战课-k8s实验环境 文章目录 Kubernetes入门实战课-k8s实验环境docker 架构图 回顾Kubernetes 作用minikube小型测试环境Kubernetes命令行工具kubectlminikube 安装过程minikube 环境示意图Kubernetes 和 Docker 之间有什么区别&#xff1f; docker 架构图 回顾…