【应用】Kubernetes

news2024/9/21 16:21:48

Kubernetes

  • k8s 安装流程
    • 安装前配置
    • 安装 docker 以及 k8s 组件
    • 初始化 k8s 集群
    • 测试使用:安装 kubernetes-dashboard
  • k8s 基础概念
    • k8s 核心技术概念
    • k8s 内部组件
    • k8s 中的 IP 地址
    • K8S 服务暴露的三种方式

k8s 安装流程

k8s-masterk8s-node01k8s-node02
192.168.86.140192.168.86.141192.168.86.142

使用的虚拟机系统为 centOS 7,三台机器配置均为 2 核 4 G;

安装前配置

在进行安装前需要在每一台节点服务器执行下列配置

关闭防火墙服务

systemctl stop firewalld
systemctl disable firewalld

关闭 selinux,修改/etc/selinux/config配置文件,设置SELINUX=disabled

vi /etc/selinux/config

关闭 swap 分区,修改/etc/fstab配置文件

vi /etc/fstab
# 将下面这行配置注释掉
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

添加主机名与 ip 的映射关系,修改各个节点的/etc/hosts,添加下列配置

192.168.86.140 k8s-master
192.168.86.141 k8s-node01
192.168.86.142 k8s-node02

分别在每一个节点修改主机名

hostnamectl set-hostname k8s-master # 192.168.86.140
hostnamectl set-hostname k8s-node01 # 192.168.86.141
hostnamectl set-hostname k8s-node02 # 192.168.86.142

将桥接的 IPv4 流量传递到 iptables 的链,然后重新加载系统配置

cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system # 重新加载系统配置

为避免低内核产生问题,将所有机器的内核进行升级

查看当前版本内核

uname -a
# 当前内核如下
Linux k8s-node01 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

执行升级,安装 epel 源

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

查看内核版本并安装最新版本(这里安装的是 5.4.224 版本)

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

安装最新 lt 内核版本

yum --disablerepo='*' --enablerepo=elrepo-kernel install kernel-lt -y

查看系统 grub 内核的启动列表,这里编号 0 的 5.4.224 的 lt 版本是我们新安装的

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

指定以新安装的编号 0 的内核版本为默认启动内核,重新启动服务器

grub2-set-default 0
reboot

卸载旧内核版本

yum remove kernel -y

查看内核版本是否已经升级完毕

uname -a
# 当前内核版本如下
Linux k8s-node01 5.4.224-1.el7.elrepo.x86_64 #1 SMP Tue Nov 8 17:24:56 EST 2022 x86_64 x86_64 x86_64 GNU/Linux

安装 docker 以及 k8s 组件

安装常用软件包

yum install vim bash-completion net-tools gcc -y

使用 aliyun 数据源安装 docker-ce,并设置开机自启

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker

安装完 docker 后添加 aliyun 的 docker 仓库加速器(注册获取专属加速器地址)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装kubectl、kubelet、kubeadm,首先配置阿里 k8s 源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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

执行 kubectl、kubelet、kubeadm 安装,并设置 kubelet 开机启动

yum -y install kubectl-1.18.0 kubelet-1.18.0 kubeadm-1.18.0
systemctl enable kubelet

初始化 k8s 集群

初始化 master 节点(注意,要求 master 节点至少为双核)

kubeadm init --kubernetes-version=1.18.0  \
--apiserver-advertise-address=192.168.86.140   \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.100.0.0/16

初始化成功终端将打印下列信息,最后两行信息需要其他节点在加入集群时执行

Your Kubernetes control-plane has initialized successfully!

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

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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.86.140:6443 --token 2xx8pk.0pz1axnn4ujkp4hh \
    --discovery-token-ca-cert-hash sha256:b16181c504732670348e871158e701138e884959b1bd6ba5833e442aef3d213c

创建 kubectl

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

在 master 节点安装 calico 网络,第二行中的10.100.0.0需要与初始化 master 时设置的pod-network-cidr相同

curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
sed -i 's/192.168.0.0/10.100.0.0/g' calico.yaml
kubectl apply -f calico.yaml

在 node01 和 node02 节点执行命令加入集群

kubeadm join 192.168.86.140:6443 --token 2xx8pk.0pz1axnn4ujkp4hh     --discovery-token-ca-cert-hash sha256:b16181c504732670348e871158e701138e884959b1bd6ba5833e442aef3d213c

在 node01 和 node02 节点创建 kubectl

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

至此可以在任意节点查询集群节点状态

kubectl get nodes

至此 k8s 集群配置完成!

测试使用:安装 kubernetes-dashboard

Dashboard 是可视化插件,它可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。

下载相应的 yaml 文件到本地

curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml -O

修改配置文件 yaml 文件

vim recommended.yaml

在文件中添加类型与映射端口号,如图所示

在这里插入图片描述

启动服务

kubectl create -f recommended.yaml

查看服务启动情况

kubectl get pod --all-namespaces -o wide

在这里插入图片描述

访问https:ip:30000,登录需要 token,查询 token 获取的服务名

kubectl -n kubernetes-dashboard get secret

使用下列指令获取 token,-n kubernetes-dashboard后面的名字需要与刚才查询出的名称前缀为kubernetes-dashboard-token的服务名相同

kubectl describe secrets -n kubernetes-dashboard kubernetes-dashboard-token-d9tqk  | grep token | awk 'NR==3{print $2}'

填入查询出的 token,即可登录到页面(使用谷歌浏览器会被拒绝访问,可以使用 Microsoft Edge)

在这里插入图片描述

若存在权限报错问题,参考kubernetes dashboard 授权/权限/角色绑定问题导致页面报错

k8s 基础概念

kubernetes 是基于容器技术的分布式架构

k8s 核心技术概念

Master

  • Master 是整个集群的大脑,负责整个集群的管理和调度。

Node

  • Node 是集群中的工作节点,是应用容器真正运行的节点。

  • Node 受 Master 控制并向其汇报容器运行的状态。

Pod

  • Pod 是一个或者多个容器的集合,是 k8s 执行调度的最小单位,运行在每个节点上的应用实际上就是一个 Pod。

  • Pod 实际上是对一组容器的封装,同一 Pod 中的容器会被 Master 一起调度到某个 Node 上运行。

  • Pod 中的容器可以通过 Valume 共享存储,且共享 ip 地址。

Service

  • Service 是对一组 Pod 的封装,其负责发现 Pod 服务并维护 Pod-ip 列表。

  • Service 对外提供自己的 ip 和端口,实现外界对这一组 Pod 的访问,并为 Pod 提供负载均衡。

  • Service 对外提供多种入口:

    • ClusterIP:创建一个虚拟的 ip 地址,该地址在集群内唯一且不可修改,通过这个唯一的 ip 可以访问 Pod;

    • NodePort:Service 会在每一个 Node 都开放一个端口,可以通过任意 Node 的 ip + 端口号的方式访问 Pod;

    • LoadBalancer:在 NodePort 的基础上,创建一个外部的负载均衡器,并将所有请求都转发到 NodeIP:NodePort;

    • ExternalName:将服务通过 DNS CNAME 的方式转发到指定的域名(通过 spec.externalName 进行配置);

Deployment

  • Deployment 可以部署和管理应用,其可以管理多个 Pod 副本,并保证 Pod 按照期望的状态运行。

  • Deployment 通过 yml 配置文件去描述应用,并根据配置文件中的描述对应用进行管理。

k8s 内部组件

在这里插入图片描述

在 master 节点查询所有的服务

kubectl get pods --all-namespaces -o wide

在这里插入图片描述

k8s 的主要组件主要包括五部分:

  • kube-apiserver:提供 REST 接口实现认证、授权、访问控制以及服务发现等功能;

  • kube-controller:维护 k8s 集群状态;

  • kube-proxy:管理 Service 的访问入口,对请求进行转发,包括 Pod 到 Service 以及集群外到 Service;

  • kube-scheduler:提供对 Pod 的调度管理;

  • kubelet:部署在 Node 节点的守护进程,与 apiserver 通信执行调度命令并且汇报 Node 的状态;

k8s 中的 IP 地址

Node IP

Node IP 就是物理机的 IP 地址,即我们的服务器或者虚拟机的 ip。当 Service 在 Node 节点开放一个端口时,外界可以通过 Node IP:端口号 的形式访问应用,就跟直接将应用部署在服务器相同。

在 k8s 查询 Node IP

kubectl get node
kubectl describe node <Node name>

Pod IP

Pod IP 是 Docker Engine 根据 Docker 网桥的 IP 地址进行分配的。相同 Service 下的 Pod 可以通过 Pod IP 相互访问;不同 Service 下的 Pod 通信则需要通过 Cluster IP。集群外访问 Pod 则需要通过 Node IP。

在 k8s 查询 Pod IP

kubectl get pods --all-namespaces
kubectl describe pods <Pod name> -namespace <Namespace>

Cluster IP

Cluster IP 即 Service IP,是一个虚拟 ip 地址,用于集群内各个服务间通信使用。

在 k8s 查询 Cluster IP

kubectl get services
kubectl describe service <Service name>

外部访问时的请求转发

由 Node IP + port 转发至 Service IP 再转发到对应的 Pod IP,实现访问

在这里插入图片描述

K8S 服务暴露的三种方式

NodePort

该方式需要指定服务对外暴露的接口,k8s 会在每一台服务器节点都开放该端口供外部请求进行访问。请求会被转发到 Service 进而转发到 Pod,请求过程如上图所示。

对外开放的端口号在创建 Service 的 yaml 文件中指定,通过spec.ports.nodePort参数进行配置,若不指定则 k8s 会随机选择一个端口号。

在生产环境中注意开放服务器的对应端口。

LoadBalance

该方式在 NodePort 的基础上,在各个开放的端口外包装了一层负载均衡器,该均衡器提供一个统一的 ip + 端口号 供外部访问,并将访问的请求均衡的分配给每个节点,而在 NodePort 模式中并没有进行负载均衡。

该方式的每一个负载均衡器都会暴露一个 ip + 端口号,因此无法做到通过统一的 ip 入口访问到所有的服务。其请求转发过程如下图所示。

在这里插入图片描述

Ingress

采用 NodePort 模式,将在每个服务器节点开启一个端口,若提供的服务很多,则开放的端口数量非常庞大,难以维护;采用 LoadBalance 模式,每一个服务都将拥有一个公网 ip,服务数量大时同样不好维护。

通过 Ingress 模式可以通过一个 Ingress 暴露多个服务,可以将其理解为可以动态配置服务地址的 Nginx,其本质就是一个微服务网关。

Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP和HTTPS。Ingress 可以提供负载均衡、SSL 和基于名称的虚拟托管。

在这里插入图片描述

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

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

相关文章

【编程题】【Scratch四级】2022.09 三个数排序

三个数排序 输入三个数&#xff0c;比较三个数的大小&#xff0c;并将这三个数按照从小到大的顺序说出。 1. 准备工作 &#xff08;1&#xff09;保留小猫角色&#xff0c;默认位置&#xff1b; &#xff08;2&#xff09;白色背景。 2. 功能实现 &#xff08;1&#xff…

Java基于SSM框架的教室预约申请管理系统 毕业设计

本教室管理系统主要包括系统用户管理模块、楼层信息管理模块、校内新闻管理、教室信息管理、登录模块、和退出模块等多个模块。它帮助教室管理实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了教室管理数据资源,有效的减少了教室管理的…

四旋翼无人机学习第13节--Padstack Editor的简单使用

文章目录0 前言1 绘制MP2120 QFN10封装焊盘(初步学习)1.1 数据手册确定焊盘种类1.2 软件设置焊盘11.3 软件设置焊盘22 绘制DM9000A LQFP48L封装焊盘(初步学习)2.1 数据手册确定焊盘种类2.2 软件设置焊盘3 绘制STC89C51 PDIP-40封装通孔焊盘(初步学习)3.1 数据手册确定焊盘种类3…

【Spring源码系列】Bean生命周期-Bean销毁

前言 Spring给我们提供了一种当bean销毁时调用某个方法的方式。那么&#xff0c;Spring底层到底是如何实现的呢&#xff1f;接下来&#xff0c;我们将从源码案例的方式来解析&#xff1a;spring如何实现当bean销毁时调用某个方法的。 一、Bean销毁介绍 bean销毁的时机 当sp…

[附源码]计算机毕业设计springboot智能衣橱APP

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

数据增强 - 当数据有限时如何使用深度学习(一)

本文是对图像的深度学习数据增强技术的全面综述前言我们都遇到过这种情况&#xff1a;您有一个可以使用机器学习模型实现的机会&#xff0c;但当您打开网络浏览器并搜索相关数据&#xff0c;很有可能&#xff0c;您会发现一个只有几百张图像的数据集。您记得最受欢迎的数据集的…

【项目_03】日历的回显、搭建热门精选、下拉加载更多、搜索框搭建 | 基于Vue3全家桶

&#x1f4ad;&#x1f4ad; ✨: 日历的回显、搭建热门精选、下拉加载更多、搜索框搭建 | 旅途拾景   &#x1f49f;&#xff1a;东非不开森的主页   &#x1f49c;: 心若有所向往&#xff0c;何惧道阻且长&#x1f49c;&#x1f49c;   &#x1f338;: 如有错误或不足之处&…

Android入门第38天-使用随鼠标移动的圆点来熟悉onTouchEvent

简介 平时包括之前的例子大量是基于TouchListener如&#xff1a;onClick这种一类的事件。 今天给大家带来的是TouchListener与OnTouchEvent的比较&#xff0c;以及多点触碰的知识点&#xff01; TouchListener是基于监听的&#xff0c;而OnTouchEvent则是基于回调的&#xff…

SNMP协议——网络管理概述

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.网络管理概述 1.网络管理概念 2.网络管理功能 1.配置管理 …

Xshell连接如何记住用户秘钥文件

场景描述 服务器ssh登录有2种常用的方式&#xff1a; 方式1&#xff1a;用户密码认证&#xff0c;登录时输入用户名和密码。方式2&#xff1a;公钥认证(Public Key User Authentication)&#xff0c;登录时提供用户名私钥。公钥需要存储一份在服务器上该用户的~/.ssh/authori…

是德科技DSOX2002A型号示波器的使用

文章目录图使用自检电路单次触发按键恢复出厂设置水平调整区水平位移调整按钮水平时机调整旋钮垂直调整区通道启用按钮垂直档位调节旋钮垂直位移调整旋钮测量区图 使用 自检 黑色鳄鱼夹接地&#xff0c;伸缩探钩挂到左侧。 按下auto按键 使用测量按键可以调出波形的峰峰值与频…

Redis (持续更新…)

提到这个词&#xff0c;脑海里一连串&#xff1a;它是什么&#xff0c;能干什么&#xff0c;怎么干的&#xff0c;不用它行不行&#xff0c;有没有同类…… 其实就是5W2H&#xff0c;或者说凡事多问个为什么 先放官网&#xff1a; ​​​​​​Redis CRUG网站 它是开源存储…

非零基础自学Golang 2 开发环境 2.5 第一个Go 程序

非零基础自学Golang 学习文档地址&#xff1a;https://www.topgoer.cn/ 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删【已联系过文档作者】 文章目录非零基础自学Golang2 开发环境2.5 第一个Go 程序2.5.1 Hello World2 开发环境 2.5 第一个Go 程序 2…

IDEA创建Java Web项目

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…

【电商】跨境电商「保税」业务(附支付宝、微信对接指南)

​电商作为产品的一个大类&#xff0c;很多业务相关的东西都比社交、工具类产品更为复杂&#xff1b;而且涉及到经济、支付等环节&#xff0c;让很多新人头疼不已。这篇文章作者从跨境电商的「保税」业务出发&#xff0c;以支付宝、微信的对接为例&#xff0c;为你详解跨境电商…

Python之面向对象

目录 一、类的定义 二、魔法方法 三、属性管理 四、封装 五、继承&多态 一、类的定义 # 类封装 class Dog:name"修狗"age3dDog() print(fname is {d.name} ,age is {d.age}) # python与java关于类封装的区别 d.sex"母" print(fname is {d.name} ,…

逸飞激光在科创板IPO过会:前三季度营收约3亿元,同比增长59%

近日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;武汉逸飞激光股份有限公司&#xff08;下称“逸飞激光”&#xff09;获得上市委会议通过。据贝多财经了解&#xff0c;逸飞激光于2022年6月24日在科创板递交招股书。 本次冲刺科创板上市&#xff0c;逸飞激光计…

【大数据入门核心技术-Hadoop】Hadoop高可用集群搭建

目录 一、Hadoop部署的三种方式 1、Standalone mode&#xff08;独立模式&#xff09; 2、Pseudo-Distributed mode&#xff08;伪分布式模式&#xff09; 3、Cluster mode&#xff08;集群模式&#xff09; 二、准备工作 1、先完成zk高可用搭建 2、/etc/hosts增加内容 …

数据科学家赚多少?数据全分析与可视化 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; AI 岗位&攻略系列&#xff1a;https://www.showmeai.tech/tutorials/47 &#x1f4d8; 本文地址&#xff1a;https://www…

[附源码]计算机毕业设计JAVA一点到家小区微帮服务系统

[附源码]计算机毕业设计JAVA一点到家小区微帮服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM…