K8s存储

这样生成的pod名字不固定,IP不固定

此时是访问一个无状态的服务,那没什么影响,访问到访问不到都没啥影响

但是如果有一个有状态的服务,他要指定master,那此时的pod做不了负载均衡

statefulset控制器

无头服务·

创建一个 Headless Service(无头服务),为 StatefulSet 的 Pod 提供网络访问能力。

clusterIP: None:Headless Service 不分配集群 IP,而是通过 DNS 直接解析到后端 Pod 的 IP。

与 StatefulSet 配合时,会为每个 Pod 生成固定的 DNS 记录(格式:{pod-name}.{service-name}.{namespace}.svc.cluster.local),例如 web-0.web.default.svc.cluster.local。

configmap

configmap的功能

configMap用于保存配置数据,以键值对形式存储。

configMap 资源提供了向 Pod 注入配置数据的方法。

镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。

etcd限制了文件大小不能超过1M

configmap的使用场景

填充环境变量的值

设置容器内的命令行参数

填充卷的配置文件

configmap创建方式

字面值创建

授权证书会被多个文件里认证,这个认证是绝对不能删除的

通过文件创建

把这个文件的内容换了一种方式来储存,并且保存到了集群中

通过yaml文件创建

指定文件,并加上文件内容

举例:

使用configmap填充环境变量

name指定键的名称,valueFrom名字的来源

apiVersion: v1

kind: Pod

metadata:

  labels:

    run: phpmysqladmin

  name: phpmysqladmin

spec:

  containers:

  - image: mysql:8.0

    name: mysql

    ports:

      - containerPort: 3306

    envFrom:

    - configMapRef:

        name: phpmyadmin

  - image: phpmyadmin:latest

    name: phpmyadmin

    ports:

      - containerPort: 80

        protocol: TCP

        hostPort: 80

    envFrom:

    - configMapRef:

        name: phpmyadmin

k8s中的微服务

什么是微服务

微服务可以通过标签来找到能发布的服务

ipvs模式

之前说过,iptables防火墙里的策略不好,所以这里我们可以换成ipvs模式

查看集群配置

更改集群的配置

更改集群资源的命令

如果什么都没有,说明是默认的使用iptables,这里我们加上ipvs

修改配置后,要重启,这里可以删掉之前的网络配置pod,重新刷新新的pod出来,此时就是新策略的pod

微服务类型详解

clusterip

clusterip模式只能在集群内访问,并对集群内的pod提供健康检测和自动发现功能

追加内容,此时微服务和控制器就在一个配置文件里了

只有集群内部的IP,集群外部的不暴露

前面是微服务的名称加上命名空间,对微服务进行域名解析,能解析到她的IP

ClusterIP中的特殊模式headless

之前有了无头服务,要删掉,不然影响实验

没有了IP以后,后端就没有调度了

此时我们可以用dns来写,把要访问的server直接指定到后端的服务器中去

开启一个busyboxplus的pod测试

nodeport

之前的服务设置了无头服务,这里要删除之前环境,重新运行

多了一个端口

这个端口用来直接对外暴露

nodeport在集群节点上绑定端口,一个端口对应一个服务

直接负载到下面两个

对应的端口是不固定的,但是我们可以直接指定,但是有范围限制最大30000

k8s中控制器的使用

控制器也是管理pod的一种手段

自主式pod:pod退出或意外关闭后不会被重新创建

控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目

Pod控制器是管理pod的中间层,使用Pod控制器之后,只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod资源在运行中出现故障,它会基于指定策略重新编排Pod

当建立控制器后,会把期望值写入etcd,k8s中的apiserver检索etcd中我们保存的期望状态,并对比pod的当前状态,如果出现差异代码自驱动立即恢复

查看容器名称

replicaset 示例

删除pods还会重新建一个

修改个数,可以拉伸也可以声明

再次重启yml,会根据yml中的内容再次刷新个数

鍒犻櫎replicas

deployment 控制器

[root@master ~]# kubectl create deployment dep --image myapp:v1 --dry-run=client -o yaml > dep.yml

版本更新

直接在编辑文件里声明就行

查看更新效果

更新的过程是重新建立一个版本的RS,新版本的RS会把pod 重建,然后把老版本的RS回收

版本回滚

滚动更新策略

这次更新了一部分,下次更新就5秒一次,一共要更新8个

影响最小的,最丝滑的更新策略

更一个关一个

暂停及恢复

回收

Deamonset控制器

pod管理

Pod

拉取镜像

docker load -i nginx-latest.tar.gz
docker load -i busybox-latest.tar.gz

vim test.yml

vim test.yml

查看所有命名空间里的pod

[root@master ~]# kubectl get pods -A

查看所有pod的详细信息

[root@master ~]# kubectl get pods -A -o wide

如何直接运行:run的方式

apiVersion: v1
kind: Pod
metadata:
labels:
run: timinglee
name: ziyuan
spec:
containers:
- image: myapp:v1
name: myapp
resources:
limits:
cpu: 500m
memory: 100M
requests:
cpu: 500m
memory: 100M

Pod 高级配置:调度、网络与初始化
节点调度控制使用

apiVersion: v1
kind: Pod
metadata:
labels:
run: timinglee
name: test1
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
restartPolicy: Always
containers:
- image: myapp:v1
name: myapp

yaml

网络模式配置

apiVersion: v1
kind: Pod
metadata:
labels:
run: timinglee
name: test1
spec:
hostNetwork: true
restartPolicy: Always
containers:
- image: busybox:latest
name: busybox
command: ["/bin/sh", "-c", "sleep 100000"]


yaml

验证网络

初始化容器配置 initContainers:

apiVersion: v1
kind: Pod
metadata:
labels:
run: init-example
name: init-example
spec:
containers:
- image: reg.timinglee.org/library/myapp:v1
name: init-example
initContainers:
- name: init-myservice
image: busybox
command: ["sh", "-c", "until test -e /testfile; do echo waiting for myservice; sleep 2; done"]

就绪探针示例

apiVersion: v1
kind: Pod
metadata:
labels:
run: readiness
name: readiness
spec:
containers:
- image: myapp:v1
name: myapp
readinessProbe:
httpGet:
path: /test.html
port: 80
initialDelaySeconds: 1
periodSeconds: 3
timeoutSeconds: 1

[root@master ~]# kubectl describe services

k8s部署

K8s搭建

安装docker

[root@docker ~]# vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true

[root@reg yum.repos.d]# systemctl  enable --now docker

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/syste

[root@reg yum.repos.d]# docker info

安装harbor

[root@reg ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/certs/timinglee.org.key -addext "subjectAltName = DNS:reg.timinglee.org" -x509 -days 365 -out /data/certs/timinglee.org.crt

在浏览器中访问harbor的关键

[root@reg harbor]# ./install.sh --with-chartmuseum

[root@reg ~]# for i in 100 10 20

> do

> ssh -l root 172.25.254.$i mkdir -p /etc/docker/certs.d

> scp /data/certs/timinglee.org.crt root@172.25.254.$i:/etc/docker/certs.d/ca.crt

> done

[root@master ~]# cd /etc/docker/

[root@master docker]# ls

certs.d

[root@master docker]# vim daemon.json

[root@master docker]# for i in 10 20 ; do scp daemon.json root@172.25.254.$i:/etc/docker/; done

安装K8S部署工具(master node1和node2都要安装)

#部署软件仓库,添加K8S源

[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo

[k8s]

name=k8s

baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm

gpgcheck=0

#安装软件

[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y

也是master node1和node2都要安装(我这里就显示了一台)

三台机子都要改

[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service

[Unit]

Description=CRI Interface for Docker Application Container Engine

Documentation=https://docs.mirantis.com

After=network-online.target firewalld.service docker.service

Wants=network-online.target

Requires=cri-docker.socket

[Service]

Type=notify

#指定网络插件名称及基础容器镜像

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

在master节点拉取K8S所需镜像

[root@master ~]# docker images | awk '/google/{print $1":"$2}' |awk -F / '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'

oot@master ~]# docker images | awk '/reg/{print $0}'

[root@master ~]# docker images | awk '/reg/{print $1":"$2}'

[root@master ~]# docker images | awk '/timinglee/{system("docker push " $1":"$2)}'

[root@master ~]# docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.30.0 reg.timinglee.org/k8s/kube-apiserver:v1.30.0

[root@master ~]# docker push reg.timinglee.org/k8s/kube-apiserver:v1.30.0


启动kubelet服务

[root@k8s-master ~]# systemctl status kubelet.service

集群初始化

#启动kubelet服务

[root@k8s-master ~]# systemctl status kubelet.service

#执行初始化命令

[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \

--image-repository reg.timinglee.org/k8s \

--kubernetes-version v1.30.0 \

--cri-socket=unix:///var/run/cri-dockerd.sock

#指定集群配置文件变量

[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

[root@master ~]# source ~/.bash_profile

[root@master ~]# kubectl get nodes

root@master ~]# vim kube-flannel.yml

一定要关防火墙

在此阶段如果生成的集群token找不到了可以重新生成

[root@k8s-master ~]#   kubeadm token create --print-join-command

kubeadm join 172.25.254.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery-token-ca-cert-hash sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习-----《PyTorch深度学习核心应用解析:从环境搭建到模型优化的完整实践指南》

一、深度学习框架对比核心框架对比PyTorch:支持GPU加速,底层基于NumPy,Meta(原Facebook)开发,生态完善(如Llama大模型)。TensorFlow:谷歌开发,存在2个不兼容版…

Ubuntu Server 系统安装 Docker

文章目录简介Ubuntu Server 简介VirtualBox 安装 Ubuntu Server 系统安装 DockerDocker 配置重启 Docker验证镜像源把用户加入 docker 组开启 Docker Api卸载 Docker简介 本文详细介绍了在Ubuntu系统上安装和配置Docker的完整流程,包括Docker官方源添加、依赖包安装…

从0到1:用 Qwen3-Coder 和 高德MCP 助力数字文旅建造——国庆山西游

从0到1:用 Qwen3-Coder 和 高德MCP 助力数字文旅建造——国庆山西游 1. 背景 “技术不是替代旅行,而是让旅途更有把握,让每一次选择更符合你的期待。” 随着大模型与地图服务能力的成熟,围绕旅游场景的“智能行程助理”成为低门槛…

RabbitMQ--消费端异常处理与 Spring Retry

1. 消息确认机制(ack)RabbitMQ 消息投递到消费者后,必须确认(ack)才能从队列中移除:auto-ack true消息一投递就算消费成功。如果消费者宕机,消息会丢失。一般不用。manual-ack false&#xff…

eniac:世界上第一台通用电子计算机的传奇

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! ✨ 1. eniac概述:计算机时代的黎明 eniac(ele…

网络与信息安全有哪些岗位:(6)安全开发工程师

想知道网络与信息安全领域有哪些具体岗位吗? 网络与信息安全有哪些岗位:(1)网络安全工程师-CSDN博客 网络与信息安全有哪些岗位:(2)渗透测试工程师_网络安全渗透工程师-CSDN博客 网络与信息安…

C-JSON接口的使用

一、cJSON 核心数据结构cJSON 的所有操作都围绕 cJSON 结构体展开,它代表 JSON 中的一个节点(可以是对象、数组、字符串、数字等):typedef struct cJSON {struct cJSON *next, *prev; // 用于链表(数组/对象的子节点…

TypeScript 类型系统(二)

本文将简述类型系统中的类型联合,通俗的来说就是将一个变量规定为不是某一个类型,而是某些类型,我们在日常开发中很常见下面会给出例子。值类型在JavaScript中用const声明的变量是不可以再次赋值的,也就是常量。在TypeScript中也可…

无刷电机控制 - STM32F405+CubeMX+HAL库+SimpleFOC08,速度闭环控制(有电流环)

导言 《STM32F405CubeMXHAL库SimpleFOC07,ADC采样相电流,频率20KHz(TIM1触发Injected Sampling中断》,有了上一章节的电流采样后,可以完善速度闭环控制了。 有了电流环的速度闭环控制,电机的扭矩会显得大很…

【机械故障】共振峰

机械故障信号分析 提示:学习笔记 1、机械振动名词 2、共振峰 共振峰 机械故障信号分析 1、机械振动名词 [2、共振峰](https://editor.csdn.net/md/?not_checkout=1&activity_id=10937&spm=1057.2600.3001.10415) @[TOC](共振峰) `详细讲解共振峰、共振频率带、共振频…

力扣(用队列实现栈)

解析 LeetCode 225. 用队列实现栈:单队列的巧妙运用 一、题目分析(一)功能需求 实现 MyStack 类,支持栈的四种操作: push(int x):将元素压入栈顶。pop():移除并返回栈顶元素。top():…

服务器Docker 安装和常用命令总结

Docker 安装和常用命令总结Docker 是一种开源平台,用于自动化应用程序的部署、扩展和管理。通过将应用程序及其依赖打包到一个轻量级、可移植的容器中,Docker 能够在任何地方统一运行,解决了不同环境间的兼容性问题。本篇文章将介绍 Docker 的…

2025年广东省无线电管理普法宣传活动

一、无线电发射设备型号核准相关制度及要求1.型号核准设备类型:一、公众网移动通信设备二、专用通信设备三、无线接入设备四、广播发射设备五、雷达设备六、导航设备七、卫星通信设备(含终端地球站)无线电发射设备八、公众网移动通信模块九、无线接入模块十、其他设…

使用 Whisper 将南蒂罗尔方言语音转录为标准德语文本的研究

使用 Whisper 将南蒂罗尔方言语音转录为标准德语文本的研究 原文:Speech transcription from South Tyrolean Dialect to Standard German with Whisper 本研究展示了首个经过微调的Whisper模型,用于将南蒂罗尔方言语音自动翻译为标准德语文本。为了满足字幕和翻译方面尚未被…

Nexus管理maven仓库和jar包的配置和使用

登录nexus以后点击Settings-Repository-Repositories-Create repository 选择maven2(hosted)创建两个仓库一个是Release叫做monitor-releases:一个是Snapshot叫做monitor-snapshots:在创建一个maven2(group)叫做monitor将maven-central(用于存…

疯狂星期四文案网第50天运营日记

网站运营第50天,点击观站: 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 今日访问量 今天流量减了一些,我发现我的疯狂星期四的词没有排名第一了,感觉应该是抽象文案这个导致的,因为我发了…

计算机视觉学习路线:从入门到进阶的完整指南

计算机视觉学习路线:从入门到进阶的完整指南 计算机视觉(Computer Vision, CV)是人工智能领域最热门和最具前景的方向之一,它赋予机器“看”和“理解”图像与视频的能力。无论你是学生、工程师还是对AI感兴趣的爱好者&#xff0c…

移动应用抓包与调试实战 Charles工具在iOS和Android中的应用

随着移动互联网的发展,几乎所有应用都依赖API接口进行数据交互。无论是登录注册、支付功能,还是新闻资讯加载,背后都需要与服务器频繁通信。如何快速定位问题、验证数据传输、模拟弱网环境,成为移动端开发者日常工作中的关键任务。…

【Python NTLK自然语言处理库】

安装流程 import nltk nltk.download()运行后出现一个界面,然后按DownloadTokenize ###分词 from nltk.tokenize import word_tokenize text "The vendor paid $20,000,000." tokens word_tokenize(text) print(tokens)输出 [The, vendor, paid, $, 20,…