Service
Service 是 某种抽象封装 的 Pod ,因此Service也有其IP
Service 也是 Pod ,因此他们只能在k8s集群内部被访问到,如果想要从外部访问
用 Ingress
用 NodePort
服务发现:在微服务架构中,服务可能会动态地注册和注销,服务的端口可能会变化。服务发现机制允许服务实例在启动时注册自己的endpoint信息,包括IP和端口,客户端通过服务发现机制来获取最新的服务endpoint信息。
原理#
看下面解析配合上面的图片
各个部分
Service
每个Service都有其IP
创建 Service 时,会创建一个服务名即 nginx-svc , 同时他会绑定一个端口号 :80:32057
:80 是pod暴露出来的端口号,:32057 是Service监听的端口号
当使用 NodePort 类型的 Service 时,外部流量通过 Node IP(也就是192.168.113.120) 和指定的端口(NodePort:32057)访问服务。这允许从集群外部访问集群内的服务。
Service 通过选择器(selector ...
DaemonSet
在Kubernetes中,DaemonSet 是一种控制器,用于确保在集群中的每个节点(或您指定的一组节点)上运行一个 Pod 的副本。DaemonSet 常用于在集群中运行一些提供系统级功能的 Pod,例如:
日志收集:在每个节点上运行日志收集器,以收集所有节点上的容器日志。
监控:在每个节点上部署监控代理,以收集性能指标。
存储:为集群中的每个节点提供存储相关服务,例如使用 glusterfs 或 ceph。
网络:运行网络插件,例如覆盖网络或服务发现。
安全:部署安全相关的代理或扫描器。
DaemonSet 与 Deployment 类似,都可以用来管理 Pod 的生命周期,但它们的主要区别在于:
范围:Deployment 管理的 Pod 副本数量是可配置的,而 DaemonSet 总是尝试在每个符合条件的节点上运行一个 Pod 副本。
选择性:DaemonSet 可以定义在哪些节点上运行 Pod,通过节点标签和选择器来控制。
更新:当 DaemonSet 更新时,它会逐个节点更新 Pod,而不是同时更新所有 Pod。
为什么#所以为什么要使用DaemonSet,来 ...
初识Vue
第一次接触Vue,看文档还是有点蒙蔽的,直接快进到Quick Start
第一个Demo#
下载Vue:
12345npm create vue@latest # 添加vue的依赖--后面的选项全选nocd <your-project-name> #进入vue的工作目录npm install #估计也是安装依赖,反正我不操心npm run dev #启动项目--这个最重要了npm run build # 编译成应用程序,反正开发阶段不需要理解这个
刚刚安装好依赖估计是这样的:
不用看注释,这个是我尝试的东西。
然后 npm run dev 启动,就会出现这个图案
为了更好理解一下这个框架,我稍作一下修改
创建 ./src/apps.vue
12345678910111213<template> <h1>{{ message }}</h1> </template> <script> export default { data() ...
StatefulSet
–背景
当对于无状态应用时我们可以随意扩容删除
但对于有状态应用时我们就不能随意,因为他要依赖我们本地的文件和网络等
那么我们有状态应用就需要实现在容器的删除建立中,文件网络时不变的
Headless Service
用于定义网络标志(DNS domain)
服务名 ==> 域名 ==> ip
volumeClaimTemplate
将某些依赖挂载到这个卷上,实现持久化存储
如何创建一个sts#
cd /home/echin
mkdir sts
cd sts/
touch web.yaml
vim web.yaml
12345678910111213141516171819202122232425262728293031323334353637383940414243444546* ````` apiVersion: apps/v1 # 指定使用的 Kubernetes API 版本 kind: StatefulSet # 资源类型为 StatefulSet,用于管理有状态应用的 Pod 副本 metadat ...
Deployment
回顾什么是RS#在 Kubernetes 中,RS 是 ReplicaSet 的缩写,它是一种 API 对象,用于确保指定数量的 Pod 副本始终运行并处于可用状态。ReplicaSet 负责维护 Pod 副本的稳定运行,如果由于某些原因(如节点故障或 Pod 崩溃)导致 Pod 副本数量减少,ReplicaSet 将替换这些 Pod 以维持期望的副本数量。
ReplicaSet 通常与 Deployment 一起使用,Deployment 控制器使用 ReplicaSet 来管理 Pod 副本的声明周期。Deployment 负责声明 Pod 模板的期望状态,而 ReplicaSet 负责实现这个状态。
ReplicaSet 的主要特点包括:
副本数量保证:确保指定数量的 Pod 副本始终运行。
选择器(Selector):ReplicaSet 使用选择器来识别和管理它应该管理的 Pod。选择器是一个标签查询,用于匹配 Pod 的标签。
更新和替换:当 Pod 模板发生变化时,ReplicaSet 可以替换旧的 Pod 副本,以确保所有 Pod 都符合新的模板。
ReplicaS ...
Pod
用yml建立一个Pod#
选定一个位置并创建文件
123cd /home/echinmkdir pods/touch nginx-demo.yaml
撰写yml文件
1vim nginx-demo.yaml
yaml文件
不用背,直接让GPT生成吧,感觉自己写的总是有问题
12345678910111213141516171819202122232425262728293031323334当然可以。以下是一个简单的 Kubernetes Pod 的 YAML 配置示例,它定义了一个运行 Nginx Web 服务器的 Pod:apiVersion: v1 # 使用的 Kubernetes API 版本kind: Pod # 资源类型为 Podmetadata: name: nginx-pod # Pod 的名称 namespace: default # Pod 所在的命名空间,默认为 default labels: # 为 Pod 设置标签,可以用于选择器 app: nginxspec: # Pod 的详细规格定义 containers: # 容 ...
k8s图形化界面
连接k3s#
首先确保你有Lens和k3s,我这里操作的是本地的
cd / 到达根目录
cd /etc/rancher/k3s/ 到达这个目录,有个k3s.yaml的文件
cat k3s.yaml
获得以下信息:
12345678910111213141516171819202122apiVersion: versionclusters:- cluster: certificate-authority-data: xxxxxxxxxxxxxxxxxxxxxxxxxx server: https://ip:port name: defaultcontexts:- context: cluster: default user: default name: defaultcurrent-context: defaultkind: Configpreferences: {}users:- name: default user: client-certificate-data: xxxxxxxxxxxxxxxxxxxx ...
Termius远程连接aliyun
Termius远程连接ES云服务器#连接使用SSH的公钥密钥配对使用
首先你需要有一台云服务器和下载Termius.exe,并且登录云服务器和Termius
在云服务器中
公钥写在 /home/username/.ssh/authorized_keys 下
如果首先创建了用户,需要自己创建.ssh目录
我是直接用root登录,因此直接使用 /root/.ssh/authorized_keys了
1234cd .. #移动到根目录cd root cd .ssh/nano authorized_keys
创立密钥对(Termius)
打开Termius,然后按照下面步骤打开
Label 相当于他的名字
Passphase 相当于他的口令,这个口令是用来加密你的密钥的,输入Label,PassPhase后生成会有一个
Private Key 私钥,这个非常重要,不能乱放
Public Key 公钥,公共的要交给服务器的
输入公钥
如果你一开始服务器就是用SSH登录的,这个文件中应该会有一行公钥,类似于这样的公钥
1ssh-rsa AAAAB3xxxxxxxxxxxxxxx ...
k8s集群架构与组件
集群架构#总架构图:
Controll plane(主节点) -> Node(从节点) + 一堆附加组件
每一个大框可以看作一个服务器,也就是一个节点;因此这张图上有三个服务器,可以看出k8s的需求资源庞大
大致流程:
客户端 -> api-server(其中有命令行-http服务-k8s接口服务) -> pods
对就是这么简单
api-server 是交换api的核心,这个是最重要的
组件#
Controll Plane(Master)
Node(节点)
附加的一些节点
这个真的是我看过的最详细的一张图了:
Controll Plane (Master):
api-server(核心)
api-server 提供的是接口服务,基于 REST 风格开放k8s接口的服务
所有的操作都是围绕 api-server 展开的, api-server 维护了各种功能api
api-server 提供了 Master 到 Node 的交互
[!IMPORTANT]
对象的创建,删除,修改都是通过Kubernetes API,也就是Api-s ...
k8s核心概念
什么是k8s#k8s 是面向资源的,一切皆资源,我们可以通过json,yaml(一般用yaml)等方式来描述资源(Pod,Service,Node)
资源和对象映射到JAVA中,资源相当于Java中的类,而对象就是类形成的实例
pod 是最小的调度单位,k8s 最终的资源呈现都是以pod为形态展现的。
pod 相当于底层的一个单位。
kubernetes , 是容器编排引擎,是为了让容器部署更加方便,可以管理云平台中多主机上的容器化应用,正常之前的DevOps(Docker Compose)是可以实现在单主机上的应用
传统部署 vs 虚拟化部署vs 容器化部署#
传统部署
人工频繁:人们需要很繁琐地去部署,维护
并发问题:当应用A和应用B同时修改某个文件的时候,就会出现并发问题
网络带宽的资源缺少问题:应用A和应用B同时占用同一个带宽,网络拥挤
CPU,磁盘的资源争抢问题:同上
虚拟化部署
将服务器虚拟化,在一个物理服务器上划分为许许多多的虚拟机
但是会出现不必要资源占用的情况,即启动一个虚拟机需要的资源太多了,但是如果一个虚拟机上只安装了一两个应用就会方向整个操作系统有 ...