Kubernetes(k8s)进阶
文章目录
- Kubernetes进阶
- 一、Namespace(名称空间)
- 1.namespace介绍
- 2.管理namespace
- 查看namespace
- 创建namespace
- yaml文件配置namespace
- 二、Pod(最小基本部署单元)
- 1.pod介绍
- 2.管理pod
- 创建并运行pod
- 查看pod信息
- 访问pod
- 删除pod
- yaml文件配置pod
- 三、Label(标签)
- 1.label介绍
- 2.管理label的命令
- 创建标签(为pod打标签)
- 查看标签
- 通过标签筛选
- 删除标签
- yaml文件配置lable
- 四、Deployment(调度器)
- 1.deployment介绍
- 2.管理deployment的命令
- 创建deployment
- 查看deployment的信息
- 详细查看deployment的信息
- 删除deployment
- 通过yaml文件配置deployment
- 五、Service
- 1.service介绍
- 2.管理service的命令
- 创建service
- 一、创建集群内部可访问的Service
- 二、创建集群外部也可访问的Service
- 查看service
- 删除service
- yaml文件配置service
Kubernetes进阶
一、Namespace(名称空间)
1.namespace介绍
Namespace(名称空间)是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。
可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
kubernetes在集群启动之后,会默认创建几个namespace
//查看所有的名称空间
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 2d22h //所有未指定Namespace的对象都会被分配在default命名空间
kube-flannel Active 2d21h
kube-node-lease Active 2d22h //集群节点之间的心跳维护,v1.13开始引入
kube-public Active 2d22h //此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system Active 2d22h //所有由Kubernetes系统创建的资源都处于这个命名空间
[root@master ~]#
2.管理namespace
查看namespace
//查看所有的namespace
--语法:kubectl get namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 2d22h
kube-flannel Active 2d21h
kube-node-lease Active 2d22h
kube-public Active 2d22h
kube-system Active 2d22h//查看指定的namespace
--语法:kubectl get namespace namespace名称
[root@master ~]# kubectl get namespace kube-system
NAME STATUS AGE
kube-system Active 2d22h
[root@master ~]# //指定输出格式;kubernetes支持的格式有很多,比较常见的是wide、json、yaml
--语法:kubectl get namespace namespace名称 -o 格式参数
[root@master ~]# kubectl get namespace kube-system -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: "2023-11-13T08:40:58Z"labels:kubernetes.io/metadata.name: kube-systemname: kube-systemresourceVersion: "11"uid: 055e9695-d07f-4181-b0e5-32b25919f4ef
spec:finalizers:- kubernetes
status:phase: Active
[root@master ~]# //查看ns详情
--语法:kubectl describe namespace namespace名称
[root@master ~]# kubectl describe namespace kube-system
Name: kube-system
Labels: kubernetes.io/metadata.name=kube-system
Annotations: <none>
Status: Active //Active 命名空间正在使用中 Terminating 正在删除命名空间No resource quota. //ResourceQuota 针对namespace做的资源限制No LimitRange resource. //LimitRange针对namespace中的每个组件做的资源限制
[root@master ~]#
创建namespace
//创建一个namespace
--语法:kubectl create namespace namespace名称
[root@master ~]# kubectl create namespace wanf
namespace/wanf created
[root@master ~]#
yaml文件配置namespace
写一个yaml文件
[root@master ~]# vim ns-lc-yaml
[root@master ~]# cat ns-lc-yaml
apiVersion: v1
kind: Namespace
metadata:name: lc
[root@master ~]#
执行对应的创建和删除命令
//创建
[root@master ~]# kubectl create -f ns-lc-yaml
namespace/lc created
[root@master ~]# //删除
[root@master ~]# kubectl delete -f ns-lc-yaml
namespace "lc" deleted
[root@master ~]#
二、Pod(最小基本部署单元)
1.pod介绍
pod是Kubernetes中最小的可调度单位,它可以包含一个或多个容器。Pod代表应用程序的一个实例,包含了共享的网络和存储资源。Pod可以动态地进行伸缩,并且可以在不同的节点之间迁移。
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。
kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:
//查看名称空间kube-system里面的pod
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-66f779496c-5thsr 1/1 Running 11 (36m ago) 2d22h
coredns-66f779496c-nqjkx 1/1 Running 11 (36m ago) 2d22h
etcd-master 1/1 Running 5 (36m ago) 2d22h
kube-apiserver-master 1/1 Running 5 (36m ago) 2d22h
kube-controller-manager-master 1/1 Running 5 (36m ago) 2d22h
kube-proxy-5m7lh 1/1 Running 5 (36m ago) 2d22h
kube-proxy-7dc82 1/1 Running 5 (36m ago) 2d22h
kube-proxy-t6fc7 1/1 Running 5 (36m ago) 2d22h
kube-scheduler-master 1/1 Running 5 (36m ago) 2d22h
[root@master ~]#
2.管理pod
创建并运行pod
kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的
# 命令格式: kubectl run (pod控制器名称) [参数]
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace//示例
[root@master ~]# kubectl run httpd --image=lcwanf/apache:v0.2 --port=80 --namespace wanf
pod/httpd created //创建成功
[root@master ~]#
查看pod信息
//查看刚刚创建的pod
--查看基本信息
[root@master ~]# kubectl get pods -n wanf
NAME READY STATUS RESTARTS AGE
httpd 1/1 Running 0 15m
[root@master ~]# --查看详细信息
[root@master ~]# kubectl describe pod httpd -n wanf
Name: httpd
Namespace: wanf
Priority: 0
Service Account: default
Node: node2/192.168.179.15
Start Time: Thu, 16 Nov 2023 15:30:14 +0800
Labels: run=httpd
Annotations: <none>
Status: Running
IP: 10.244.2.8
IPs:IP: 10.244.2.8
Containers:httpd:Container ID: containerd://301ea62c59afcc16bb8a9ff4b14bbddd4168677c6434acc6bb20d4970d149035Image: lcwanf/apache:v0.2Image ID: docker.io/lcwanf/apache@sha256:03b968f7958f5e47650bc785c3bf3a7646fdade94d1e5db589f6aa4bf470d29aPort: 80/TCPHost Port: 0/TCPState: RunningStarted: Thu, 16 Nov 2023 15:30:55 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mk4w7 (ro)
Conditions:Type StatusInitialized True Ready True ContainersReady True PodScheduled True
Volumes:kube-api-access-mk4w7:Type: Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds: 3607ConfigMapName: kube-root-ca.crtConfigMapOptional: <nil>DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 17m default-scheduler Successfully assigned wanf/httpd to node2Normal Pulling 17m kubelet Pulling image "lcwanf/apache:v0.2"Normal Pulled 16m kubelet Successfully pulled image "lcwanf/apache:v0.2" in 40.558s (40.558s including waiting)Normal Created 16m kubelet Created container httpdNormal Started 16m kubelet Started container httpd
[root@master ~]#
访问pod
//获取pod的IP地址
[root@master ~]# kubectl get pods -n wanf -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
httpd 1/1 Running 0 18m 10.244.2.8 node2 <none> <none>
[root@master ~]# //使用curl命令访问
[root@master ~]# curl http://10.244.2.8
<html><body><h1>nice bike</h1></body></html> //成功访问
[root@master ~]#
删除pod
//删除指定的pod
[root@master ~]# kubectl delete pod httpd -n wanf
pod "httpd" deleted
[root@master ~]#
--查看名称空间wanf里面的pod;已经查询不到任何pod,因为这个pod是手动创建的,不是通过deployment创建的,所以不会重新启动一个新的pod。
[root@master ~]# kubectl get pods -n wanf -o wide
No resources found in wanf namespace.
[root@master ~]#
yaml文件配置pod
写一个yaml文件
[root@master ~]# vim pod-test-yaml
[root@master ~]# cat pod-test-yaml
apiVersion: v1
kind: Pod
metadata:name: httpdnamespace: wanf
spec:containers:- image: lcwanf/apache:v0.2name: podports:- name: httpd-testcontainerPort: 80protocol: TCP
[root@master ~]#
执行对应的创建和删除命令
//创建
[root@master ~]# kubectl create -f pod-test-yaml
pod/httpd created
[root@master ~]#
--查看创建的pod
[root@master ~]# kubectl get -f pod-test-yaml
NAME READY STATUS RESTARTS AGE
httpd 1/1 Running 0 71s
[root@master ~]# //删除
[root@master ~]# kubectl delete -f pod-test-yaml
pod "httpd" deleted
[root@master ~]#
三、Label(标签)
1.label介绍
Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
Label的特点:
- 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等
- 一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去
- Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除
可以通过Label实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。
一些常用的Label 示例如下:
- 版本标签:“version”:“release”, “version”:“stable”…
- 环境标签:“environment”:“dev”,“environment”:“test”,“environment”:“pro”
- 架构标签:“tier”:“frontend”,“tier”:“backend”
标签定义完毕之后,还要考虑到标签的选择,这就要使用到Label Selector,即:
Label用于给某个资源对象定义标识
Label Selector用于查询和筛选拥有某些标签的资源对象
当前有两种Label Selector:
-
基于等式的Label Selector
name = slave: 选择所有包含Label中key="name"且value="slave"的对象
env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象
-
基于集合的Label Selector
name in (master, slave): 选择所有包含Label中的key="name"且value="master"或"slave"的对象
name not in (frontend): 选择所有包含Label中的key="name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号","进行分隔即可。例如:
name=slave,env!=production
name not in (frontend),env!=production
2.管理label的命令
创建标签(为pod打标签)
//打单个标签
[root@master ~]# kubectl label pod httpd version=0.2 -n wanf
pod/httpd labeled
[root@master ~]# //打多个标签,用空格隔开
[root@master ~]# kubectl label pod httpd version=0.2 app=httpd master=wanf -n wanf
pod/httpd labeled
[root@master ~]#
查看标签
//语法:kubectl get pod pod名称 -n 名称空间 --show-labels
[root@master ~]# kubectl get pod httpd -n wanf --show-labels
NAME READY STATUS RESTARTS AGE LABELS
httpd 1/1 Running 0 7m43s app=httpd,master=wanf,version=0.2
[root@master ~]#
通过标签筛选
//筛选标签app=httpd的pod
[root@master ~]# kubectl get pods -n wanf -l app=httpd --show-labels
NAME READY STATUS RESTARTS AGE LABELS
httpd 1/1 Running 0 34m app=httpd,master=wanf,version=0.2
[root@master ~]#
//反选,加感叹号!
[root@master ~]# kubectl get pods -n wanf -l app!=httpd --show-labels
No resources found in wanf namespace.
[root@master ~]#
删除标签
//删除pod里面master=wanf这个标签
[root@master ~]# kubectl label pod httpd master- -n wanf
pod/httpd unlabeled
[root@master ~]#
--查看删除一个标签后的pod
[root@master ~]# kubectl get pod httpd -n wanf --show-labels
NAME READY STATUS RESTARTS AGE LABELS
httpd 1/1 Running 0 37m app=httpd,version=0.2
[root@master ~]#
yaml文件配置lable
写一个yaml文件
[root@master ~]# vim lable-pod.yaml
[root@master ~]# cat lable-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: httpdv1namespace: wanflabels:version: "0.3" env: "test"
spec:containers:- image: lcwanf/apache:v0.2name: httpd-testports:- name: httpdcontainerPort: 80protocol: TCP
[root@master ~]#
执行对应的创建和删除命令
//创建
[root@master ~]# kubectl create -f lable-pod.yaml
pod/httpdv1 created
[root@master ~]#
--查看创建的pod,并显示标签
[root@master ~]# kubectl get pod -n wanf --show-labels
NAME READY STATUS RESTARTS AGE LABELS
httpdv1 1/1 Running 0 71s env=test,version=0.3
[root@master ~]# //删除
[root@master ~]# kubectl delete -f lable-pod.yaml
pod "httpdv1" deleted
[root@master ~]#
四、Deployment(调度器)
1.deployment介绍
在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。
在kubernetes中Pod控制器的种类有很多,本文章只介绍一种:Deployment。
Deployment:用于定义和管理应用程序的部署。Deployment描述了应用程序的期望状态,并负责在集群中创建和更新Pod。它支持滚动更新、回滚和扩缩容等操作。
2.管理deployment的命令
创建deployment
# 命令格式: kubectl create deployment 名称 [参数]
# --image 指定pod的镜像
# --port 指定端口
# --replicas 指定创建pod数量
# --namespace 指定namespace//示例
--在名称空间wanf下创建一个名为httpd的deployment,镜像为lcwanf/apache:v0.2,pod数量为4个
[root@master ~]# kubectl create deployment httpd --image=lcwanf/apache:v0.2 --port=80 --replicas=4 -n wanf
deployment.apps/httpd created
[root@master ~]# --查看deployment创建的pod
[root@master ~]# kubectl get pods -n wanf
NAME READY STATUS RESTARTS AGE
httpd-cd9dc9fb8-48v28 1/1 Running 0 2m8s
httpd-cd9dc9fb8-dx674 1/1 Running 0 2m8s
httpd-cd9dc9fb8-skkcx 1/1 Running 0 2m8s
httpd-cd9dc9fb8-t59g6 1/1 Running 0 2m8s
[root@master ~]# //删除由deployment创建的pod,deployment会自动重新启动一个新的pod,保证数量满足定义的标准
[root@master ~]# kubectl delete pod httpd-cd9dc9fb8-t59g6 -n wanf
pod "httpd-cd9dc9fb8-t59g6" deleted--依然是四4个pod
[root@master ~]# kubectl get pods -n wanf
NAME READY STATUS RESTARTS AGE
httpd-cd9dc9fb8-48v28 1/1 Running 0 4m27s
httpd-cd9dc9fb8-b5wg8 1/1 Running 0 4s
httpd-cd9dc9fb8-dx674 1/1 Running 0 4m27s
httpd-cd9dc9fb8-skkcx 1/1 Running 0 4m27s
[root@master ~]#
查看deployment的信息
//简单查看
[root@master ~]# kubectl get deployment -n wanf
NAME READY UP-TO-DATE AVAILABLE AGE
httpd 4/4 4 4 2m50s
[root@master ~]# //较详细查看
# UP-TO-DATE:成功升级的副本数量
# AVAILABLE:可用副本的数量
[root@master ~]# kubectl get deployment -n wanf -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd 4/4 4 4 5m43s apache lcwanf/apache:v0.2 app=httpd
[root@master ~]#
详细查看deployment的信息
[root@master ~]# kubectl describe deployment -n wanf
Name: httpd
Namespace: wanf
CreationTimestamp: Thu, 16 Nov 2023 17:00:46 +0800
Labels: app=httpd
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=httpd
Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:Labels: app=httpdContainers:apache:Image: lcwanf/apache:v0.2Port: 80/TCPHost Port: 0/TCPEnvironment: <none>Mounts: <none>Volumes: <none>
Conditions:Type Status Reason---- ------ ------Available True MinimumReplicasAvailableProgressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: httpd-cd9dc9fb8 (4/4 replicas created)
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 7m29s deployment-controller Scaled up replica set httpd-cd9dc9fb8 to 4
[root@master ~]#
删除deployment
//删除deployment后才会彻底删除其管理的pod
[root@master ~]# kubectl delete deployment httpd -n wanf
deployment.apps "httpd" deleted
[root@master ~]#
--查看pod,已经没有任何pod,也不会自动重新启动新的pod
[root@master ~]# kubectl get pods -n wanf
No resources found in wanf namespace.
[root@master ~]#
通过yaml文件配置deployment
写一个yaml文件
[root@master ~]# vim deployment-httpd.yaml
[root@master ~]# cat deployment-httpd.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: httpdnamespace: wanf
spec:replicas: 5selector:matchLabels:run: httpdtemplate:metadata:labels:run: "httpd"version: "0.2"spec:containers:- image: lcwanf/apache:v0.2name: httpd-testports:- containerPort: 80protocol: TCP
[root@master ~]#
执行对应的创建和删除命令
//创建
[root@master ~]# kubectl create -f deployment-httpd.yaml
deployment.apps/httpd created
[root@master ~]#
--查看创建的deployment
[root@master ~]# kubectl get -f deployment-httpd.yaml
NAME READY UP-TO-DATE AVAILABLE AGE
httpd 5/5 5 5 71s
--查看该deployment所管理的pod
[root@master ~]# kubectl get pods -n wanf
NAME READY STATUS RESTARTS AGE
httpd-56957b6fc7-29k5p 1/1 Running 0 33s
httpd-56957b6fc7-rcrbp 1/1 Running 0 33s
httpd-56957b6fc7-tlqg4 1/1 Running 0 33s
httpd-56957b6fc7-tsx2f 1/1 Running 0 33s
httpd-56957b6fc7-vmhxz 1/1 Running 0 33s
[root@master ~]# //删除
[root@master ~]# kubectl delete -f deployment-httpd.yaml
deployment.apps "httpd" deleted
[root@master ~]#
五、Service
1.service介绍
上述方法已经能够利用Deployment来创建一组Pod来提供具有高可用性的服务。
虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
- Pod IP 会随着Pod的重建产生变化
- Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问
这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。
Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。
2.管理service的命令
创建service
先创建一个Deployment
[root@master ~]# kubectl create deployment httpd --image=lcwanf/apache:v0.2 --port=80 --replicas=4 -n wanf
deployment.apps/httpd created
一、创建集群内部可访问的Service
//创建type类型为ClusterIP的service并暴露
[root@master ~]# kubectl expose deployment httpd --name=svc-httpd1 --type=ClusterIP --port=80 --target-port=80 -n wanf
service/svc-httpd1 exposed
[root@master ~]# //查看service
# 这里产生了一个CLUSTER-IP,这就是service的IP,在Service的生命周期中,这个地址是不会变动的
[root@master ~]# kubectl get svc svc-httpd1 -n wanf -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
svc-httpd1 ClusterIP 10.101.14.185 <none> 80/TCP 51s app=httpd
[root@master ~]# //在内部使用service的IP访问
[root@master ~]# curl 10.101.14.185
<html><body><h1>nice bike</h1></body></html>
[root@master ~]#
二、创建集群外部也可访问的Service
# 上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问
# 如果需要创建外部也可以访问的Service,需要修改type为NodePort//创建一个新的service,修改service的type类型为NodePort
[root@master ~]# kubectl expose deployment httpd --name=svc-httpd2 --type=NodePort --port=80 --target-port=80 -n wanf
service/svc-httpd2 exposed
[root@master ~]# //查看这个service
##会发现出现了NodePort类型的Service,而且有一对Port(80:31754/TCP)
[root@master ~]# kubectl get svc svc-httpd2 -n wanf -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
svc-httpd2 NodePort 10.103.63.181 <none> 80:31754/TCP 99s app=httpd
[root@master ~]#
在浏览器访问,成功访问
查看service
//查看某个名称空间里面的所有service
[root@master ~]# kubectl get svc -n wanf
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-httpd1 ClusterIP 10.101.249.235 <none> 80/TCP 2s
svc-httpd2 NodePort 10.101.168.65 <none> 80:30189/TCP 8s
[root@master ~]# //查看某一个service
[root@master ~]# kubectl get svc svc-httpd1 -n wanf
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-httpd1 ClusterIP 10.101.249.235 <none> 80/TCP 28s
[root@master ~]#
删除service
//删除service1
[root@master ~]# kubectl delete svc svc-httpd1 -n wanf
service "svc-httpd1" deleted//删除service2
[root@master ~]# kubectl delete svc svc-httpd2 -n wanf
service "svc-httpd2" deleted
[root@master ~]# //查看名称空间wanf里面的service,已经没有任何service
[root@master ~]# kubectl get svc -n wanf
No resources found in wanf namespace.
[root@master ~]#
yaml文件配置service
写一个yaml文件
[root@master ~]# vim svc-httpd-yaml
[root@master ~]# cat svc-httpd-yaml
apiVersion: v1
kind: Service
metadata:name: svc-httpdnamespace: wanf
spec:clusterIP: 10.101.249.111 #固定svc的内网ipports:- port: 80protocol: TCPtargetPort: 80selector:run: httpdtype: ClusterIP
[root@master ~]#
执行对应的创建和删除命令
//创建
[root@master ~]# kubectl create -f svc-httpd-yaml
service/svc-httpd created
[root@master ~]#
--查看创建的service
[root@master ~]# kubectl get -f svc-httpd-yaml
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-httpd ClusterIP 10.101.249.111 <none> 80/TCP 18s
[root@master ~]# //删除service
[root@master ~]# kubectl delete -f svc-httpd-yaml
service "svc-httpd" deleted
[root@master ~]#
相关文章:

Kubernetes(k8s)进阶
文章目录 Kubernetes进阶一、Namespace(名称空间)1.namespace介绍2.管理namespace查看namespace创建namespaceyaml文件配置namespace 二、Pod(最小基本部署单元)1.pod介绍2.管理pod创建并运行pod查看pod信息访问pod删除podyaml文件…...
[Vue 配置] Vite + Vue3 项目配置和使用 NProgress
文章归档:https://www.yuque.com/u27599042/coding_star/mfmsrf9tz98ox3qg 安装 pnpm i nprogress配置 NProgress 其他更多可参考,仓库地址:https://github.com/rstacruz/nprogress 在 src/config/nprogress.js 中进行配置 是否展示右上角圆…...
Android MQTT开发之 Hivemq MQTT Client
使用一个开源库:hivemq-mqtt-client,这是Java生态的一个MQTT客户端框架,需要Java 8,Android上使用的话问题不大,需要一些额外的配置,下面列出了相关的配置,尤其是 packagingOptions,…...

【Maven教程】(十一):使用 Maven 构建 Web应用 —— 使用 jetty-maven-plugin 进行测试、使用 Cargo 实现自动化部署~
Maven 使用 Maven 构建 Web应用 1️⃣ Web 项目的目录结构2️⃣ account-service2.1 account-service的 POM2.2 account-service 的主代码 3️⃣ account-web3.1 account-web 的POM3.2 account-web 的主代码 4️⃣ 使用 jetty-maven-plugin 进行测试5️⃣ 使用 Cargo 实现自动…...

番外 2 : LoadRunner 的安装以及配置
LoadRunner 的安装以及配置教程 一 . 配置 IE 浏览器二 . 安装 LoadRunner 工具三 . 修改默认浏览器的配置四 . 设置 LoadRunner 能够获取本地资源 Hello , 大家好 , 又给大家带来新的专栏喽 ~ 这个专栏是专门为零基础小白从 0 到 1 了解软件测试基础理论设计的 , 虽然还不足以…...

win10正确配置tensorRT环境
目的 使用tensorRT进行网络模型部署,加快推理速度 方法 安装tensorRT的过程需要对各种组件的版本进行匹配 前置安装套件有: 1、CUDA 2、cuDNN 3、pyCUDA 4、tensorflow或pytorch 主要记录tensorRT安装: tensorRT安装配置查询 步骤: 1、去tensorRT官网…...

C++初阶-模板初阶
模板初阶 一、泛型编程二、函数模板2.1函数模板概念2.2函数模板格式2.3函数模板的原理2.4函数模板的原理2.5模板参数的匹配原则 三、类模板3.1类模板的定义格式3.2类模板的实例化 一、泛型编程 如何实现一个通用的交换函数呢? void Swap(int& left, int& …...

基于Python实现汽车销售数据可视化【500010086】
导入模块 import numpy as np import pandas as pd import plotly.graph_objects as go import plotly.express as px获取数据 df1 pd.read_excel(r"./data/中国汽车总体销量.xlsx") print(df1.head(5))df1.info()df1[年份] df1[时间].dt.year df1[月份] df1[时…...
dist.init_process_group() 卡住超时导致报错
在跑模型是遇到一个问题: import torch.distributed as dist dist.init_process_group(backend"nccl", init_methodtcp://localhost:%d % tcp_port, ranklocal_rank, world_sizenum_gpus)程序卡在这一步一动不动。. 解决办法一: 我看网上有人…...
RESTFul API:真是让人又爱又恨
RESTFul API是一种广泛使用的Web服务设计风格,它以资源为中心,通过HTTP方法来操作这些资源。然而,尽管RESTFul架构风格在许多情况下都非常有用,但在实际应用中,我们也发现了一些不足之处。本文将详细阐述这些问题&…...
【洛谷 P1478】陶陶摘苹果(升级版)题解(多重集合+贪心算法)
陶陶摘苹果(升级版) 题目描述 又是一年秋季时,陶陶家的苹果树结了 n n n 个果子。陶陶又跑去摘苹果,这次他有一个 a a a 公分的椅子。当他手够不着时,他会站到椅子上再试试。 这次与 NOIp2005 普及组第一题不同的…...

使用WebSocket实现网页聊天室
一、引言 1. 问题引入 Hypertext Transfer Protocol (HTTP) 协议 一种无状态的、应用层的、以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动. 因为http 通信只能由客户端发起,服务器返回查询结果…...

《如何控制 LLM 的输出格式和解析其输出结果?》
内容来源:dotey 《如何控制 LLM 的输出格式和解析其输出结果?》 https://baoyu.io/blog/prompt-engineering/how-to-parse-the-output-from-llm 现在很多人对于如何使用像 ChatGPT 这样的 LLM 已经比较有经验了,可以使用各种不同的 Prompt …...

《网络协议》07. 其他协议
title: 《网络协议》07. 其他协议 date: 2022-10-07 18:24:02 updated: 2023-11-15 08:00:52 categories: 学习记录:网络协议 excerpt: IPv6、WebSocket、WebService(SOAP,WSDL)、HTTPDNS、FTP、邮件(SMTP,…...

高压放大器设计要求有哪些内容
设计高压放大器时,需要考虑一系列要求以确保其性能和可靠性。以下是设计高压放大器时的一些重要要求。 输入输出电压范围:高压放大器应具备足够的输入和输出电压范围,以适应特定应用的需求。这包括设计合适的电源供应和电路配置,以…...
1700亿烧光,利润暴跌78%!外媒:中芯国际不是麒麟9000S的代工厂
作为芯片代工领域的领导者,台积电在全球半导体市场上占据着重要的地位。然而,由于美国对华为的制裁,台积电关闭了对华为麒麟芯片的代工,这也引发了外界对于芯片代工模式的讨论。与此同时,中芯国际作为大陆规模最大、技…...

简单理解路由重分发(用两路由器来理解)
相关命令: default-information originate //*重分发默认路由 redistribute rip subnets //*重分发rip redistribute ospf 1 metric 3 //*重分发ospf(其中:1是ospf进程id 3是跳数) redistribute sta…...

什么是等保测评?
随着近几年随着网络技术的发展,互联网应用的普及和丰富,互联网安全问题也日益严重,利用信息技术进行的高科技犯罪事件呈现增长态势。从2004年度CNCERT的信息网络安全工作报告中我们看到,信息网络安全事故在逐年上升,20…...
21、Flink 的table API与DataStream API 集成(1)- 介绍及入门示例、集成说明
Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

(免费领源码)Java#SpringBoot#mysql高校实验室资产管理系统85189-计算机毕业设计项目选题推荐
摘 要 随着计算机技术的发展,特别是计算机网络技术与数据库技术的发展,使人们的生活与工作方式发生了很大的改观。本课题研究的高校实验室资产管理系统,主要功能模块包括后台首页,轮播图,公告管理,资源管理…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...

小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...