k8s_入门_命令详解
命令详解
kubectl是官方的CLI命令行工具,用于与 apiserver进行通信,将用户在命令行输入的命令,组织并转化为 apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径
1. 帮助
2. 查看版本信息
3. 查看资源对象等
查看Node状态
查看Master组件状态
列出K8s所有资源
查看集群接口信息
查看apiserver聚合层注册信息
查看API的版本
查看某个node的详细信息
4. kubectl自动补齐
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
现在
5. Namespaces
namespace是k8s系统中的一种非常重要的资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
默认情况下,k8s集群中的所有的pod都是可以相互访问的。但是在实际中,可能不想让两个pod之间进行互相的访问,此时就可以将两个pod划分到不同的namespace下。k8s将通过将集群内部的资源分配到不同的namespace中,可以形成逻辑上的”组“,以方便不同的组的资源进行隔离使用和管理,可以通过k8s的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。
此时还能结合k8s的资源配额机制,限定不同租户能占用的资源,例如cpu使用量,内存使用量等,来实现租户可用资源的管理。
5.1 查看所有的ns
默认创建的namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 41h #所有未指定namespace的对象都会被分配在default命名空间
kube-node-lease Active 41h #集群节点之间的心跳维护,v1.13开始引入
kube-public Active 41h #此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system Active 41h #所有由k8s系统创建的资源都处于这个命名空间
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 18h
kube-node-lease Active 18h
kube-public Active 18h
kube-system Active 18h
kubernetes-dashboard Active 18h
5.2 查看指定的ns
#命令:kubectl get ns ns名称 -o 格式参数
#k8s支持的格式很多,比较常见的是wide、json、yaml
[root@master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: "2022-08-04T14:00:03Z"labels:kubernetes.io/metadata.name: defaultname: defaultresourceVersion: "206"uid: 7d9da512-008f-4ed7-8d92-90bef1dba4d5
spec:finalizers:- kubernetes
status:phase: Active
5.3 查看ns详情
#命令 kubectl describe ns ns名称
[root@master ~]# kubectl describe ns default
Name: default
Labels: kubernetes.io/metadata.name=default
Annotations: <none>
Status: Active #Active 命名空间正在使用中,Terminating 正在删除命名空间
#Resource quota 针对namespace做的资源限制
No resource quota.
#LimitRange针对namespace的每个组件做的资源限制
No LimitRange resource.
5.4 创建
#创建namespace
[root@master ~]# kubectl create ns dev
namespace/dev created
5.5 删除
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted
5.6 配置方式
首先准备一个yaml文件:ns-dev.yaml
apiVersion: v1
kind: Namespace
metadata:name: dev
[root@master ns]# kubectl create -f ns-dev.yaml
namespace/dev created
[root@master ns]# kubectl get ns dev
NAME STATUS AGE
dev Active 20s
[root@master ns]# kubectl delete -f ns-dev.yaml
namespace "dev" deleted
[root@master ns]# kubectl get ns dev
Error from server (NotFound): namespaces "dev" not found
6. Pods
pod是k8s集群进行管理的最小单元,程序要运行必须部署到容器中,而容器必须存在于pod中。
pod可以认为是容器的封装,一个pod中可以存在一个或多个容器
k8s在集群启动之后,集群中的各个组件也都是以pod方式运行的,可以通过下面命令查看:
[root@master ns]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-6d8c4cb4d-8tqtt 0/1 Running 123 (5m58s ago) 21h
coredns-6d8c4cb4d-vm7fx 0/1 Running 123 (5m26s ago) 21h
etcd-master 1/1 Running 4 (21h ago) 21h
kube-apiserver-master 1/1 Running 7 (8h ago) 21h
kube-controller-manager-master 1/1 Running 3 (8h ago) 21h
kube-proxy-lwls6 1/1 Running 0 21h
kube-proxy-scwzg 1/1 Running 0 21h
kube-proxy-sn9kc 1/1 Running 2 (21h ago) 21h
kube-scheduler-master 1/1 Running 5 (8h ago) 21h
6.1 查看所有pod
[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-lrqqm 1/1 Running 1 (9m9s ago) 19m
kube-flannel kube-flannel-ds-ssfgk 1/1 Running 0 19m
kube-flannel kube-flannel-ds-xg9xb 1/1 Running 0 19m
kube-system coredns-6d8c4cb4d-8tqtt 1/1 Running 126 (9m4s ago) 22h
kube-system coredns-6d8c4cb4d-vm7fx 1/1 Running 126 (9m4s ago) 22h
kube-system etcd-master 1/1 Running 5 (9m9s ago) 22h
kube-system kube-apiserver-master 1/1 Running 8 (8m59s ago) 22h
kube-system kube-controller-manager-master 1/1 Running 4 (9m9s ago) 22h
kube-system kube-proxy-lwls6 1/1 Running 0 22h
kube-system kube-proxy-scwzg 1/1 Running 0 22h
kube-system kube-proxy-sn9kc 1/1 Running 3 (9m9s ago) 22h
kube-system kube-scheduler-master 1/1 Running 6 (9m9s ago) 22h
kubernetes-dashboard dashboard-metrics-scraper-799d786dbf-4fj8b 1/1 Running 132 (5m49s ago) 21h
kubernetes-dashboard kubernetes-dashboard-77b9df557f-hpxmr 1/1 Running 92 (14m ago) 21h
6.2 创建并运行
root@master ~]# kubectl create ns dev
namespace/dev created#命令格式:kubectl run (pod控制器名称) [参数]
# --image 指定pod的镜像
# --port 指定端口
# --namespace 指定namespace
[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev
pod/nginx created
6.3 查看pod
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5s
[root@master ~]# kubectl describe pod nginx -n dev
Name: nginx
Namespace: dev
Priority: 0
Node: node1/192.168.200.102
Start Time: Fri, 05 Aug 2022 20:31:52 +0800
Labels: run=nginx
Annotations: <none>
Status: Running
IP: 10.244.1.4
IPs:IP: 10.244.1.4
Containers:nginx:Container ID: docker://614f6b0c1b75b48750898014c9289e71ee85ec010619cfdb4184b25f3015965bImage: nginx:1.17.1Image ID: docker-pullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a967c03dbbPort: 80/TCPHost Port: 0/TCPState: RunningStarted: Fri, 05 Aug 2022 20:31:53 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mxqzz (ro)
6.4 访问pod
[root@master ~]# kubectl get pods -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 18m 10.244.1.2 node1 <none> <none>
[root@master ~]# curl 10.244.1.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
6.5 删除pod
#找到对应pod并删除
kubectl delete pod nginx --namespace=dev
6.6 配置方式
创建一个pod-nginx.yaml,内容如下:
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: dev
spec: containers:- image: nginx:1.17.1imagePullPolicy: IfNotPresentname: podports: - name: nginx-portcontainerPort: 80protocol: TCP
k8s的配置文件中经常看到有imagePullPolicy属性,这个属性是描述镜像的拉取策略
Always
总是拉取镜像
IfNotPresent
本地有则使用本地镜像,不拉取
Never
只使用本地镜像,从不拉取,即使本地没有
如果省略imagePullPolicy, 策略为always
#创建
[root@master ~]# kubectl create -f pod-nginx.yaml
pod/nginx created
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5m34s#删除
[root@master ~]# kubectl delete -f pod-nginx.yaml
pod "nginx" deleted
7. Lable
Label是k8s系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
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 != productionname not in (frontend),env != production
7.1 为pod资源打标签
[root@master pod]# kubectl create -f pod-nginx.yaml
pod/nginx created
[root@master pod]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5s
#查看标签
[root@master pod]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 18s <none>
[root@master pod]# kubectl label pod nginx -n dev version=1.0
pod/nginx labeled
[root@master pod]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 32s version=1.0
7.2 标签更新
更新version标签为2.0
[root@master ~]# kubectl label pod nginx -n dev version=2.0 --overwrite
pod/nginx labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 4m52s version=2.0
7.3 筛选标签
修改pod-nginx.yaml中的name为nginx1并创建pod,修改version标签为1.0
[root@master ~]# vim pod-nginx.yaml
[root@master ~]# kubectl create -f pod-nginx.yaml
pod/nginx1 created
[root@master ~]# kubectl label pod nginx1 -n dev version=1.0
pod/nginx1 labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 7m58s version=2.0
nginx1 1/1 Running 0 64s version=1.0
使用标签选择器
[root@master ~]# kubectl get pod -l "version=2.0" -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 9m36s version=2.0
[root@master ~]# kubectl get pod -l "version!=2.0" -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx1 1/1 Running 0 3m16s version=1.0
7.4 删除标签
#格式:kubectl label pod nginx -n dev 标签名-
[root@master ~]# kubectl label pod nginx -n dev version-
pod/nginx labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 13m <none>
nginx1 1/1 Running 0 6m46s version=1.0
7.5 通过配置方式进行更新
修改nginx-pod.yaml内容
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: devlabels:version: "3.0"env: "test"
spec: containers:- image: nginx:1.17.1imagePullPolicy: IfNotPresentname: podports: - name: nginx-portcontainerPort: 80protocol: TCP
执行命令
[root@master ~]# vim pod-nginx.yaml
[root@master ~]# kubectl apply -f pod-nginx.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
pod/nginx configured
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 21m env=test,version=3.0
nginx1 1/1 Running 0 14m version=1.0
8. Deployment
在k8s中,pod是最小的控制单元,但是k8s很少直接控制pod,一般都是通过pod控制器来完成。
pod控制器用于对pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod
在k8s中pod控制器的种类很多,deployment是其中的一种
命令格式:kubectl create deployment deployment名称 [参数]
–image 指定pod的镜像
–port 指定端口
–replicas 指定创建pod数量
–namespace 指定namespace
8.1 查看创建的pod
#创建一个pod
[root@master ~]# kubectl create deployment nginx --image=nginx:1.17.1 --port=80 --replicas=3 --namespace=dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created
#同时查看pod和deployment两种资源
[root@master ~]# kubectl get deployment,pod -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 3/3 3 3 114sNAME READY STATUS RESTARTS AGE
pod/nginx-64777cd554-2mbxb 1/1 Running 0 114s
pod/nginx-64777cd554-h6spm 1/1 Running 0 114s
pod/nginx-64777cd554-zjdp8 1/1 Running 0 114s
8.2 查看创建的deployment的详细信息
[root@master ~]# kubectl describe deploy nginx -n dev
Name: nginx
Namespace: dev
CreationTimestamp: Fri, 02 Jul 2021 19:29:46 +0800
Labels: run=nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: run=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:Labels: run=nginxContainers:nginx:Image: nginx:1.17.1Port: 80/TCPHost Port: 0/TCPEnvironment: <none>Mounts: <none>Volumes: <none>
Conditions:Type Status Reason---- ------ ------Available True MinimumReplicasAvailableProgressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-64777cd554 (3/3 replicas created)
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 4m42s deployment-controller Scaled up replica set nginx-64777cd554 to 3
8.3 删除deployment
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted
[root@master ~]# kubectl get pod -n dev
No resources found in dev namespace.
8.4 使用配置文件来操作
创建一个deploy-nginx.yaml,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata: name: nginxnamespace: dev
spec: replicas: 3selector: matchLabels: run: nginxtemplate:metadata:labels: run: nginxspec:containers:- image: nginx:1.17.1name: nginxports: - containerPort: 80protocol: TCP
#创建
[root@master ~]# vim deploy-nginx.yaml
[root@master ~]# kubectl create -f deploy-nginx.yaml
deployment.apps/nginx created
[root@master ~]# kubectl get deploy,pod -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 3/3 3 3 14sNAME READY STATUS RESTARTS AGE
pod/nginx-64777cd554-5k9m4 1/1 Running 0 13s
pod/nginx-64777cd554-gbn6t 1/1 Running 0 13s
pod/nginx-64777cd554-qwn2s 1/1 Running 0 13s#删除
[root@master ~]# kubectl delete -f deploy-nginx.yaml
deployment.apps "nginx" deleted
[root@master ~]# kubectl get deploy,pod -n dev
No resources found in dev namespace.
9. Service
使用deploy-nginx.yaml创建控制器
apiVersion: apps/v1
kind: Deployment
metadata: name: nginxnamespace: dev
spec: replicas: 3selector: matchLabels: run: nginxtemplate:metadata:labels: run: nginxspec:containers:- image: nginx:1.17.1name: nginxports: - containerPort: 80protocol: TCP
[root@master ~]# kubectl create -f deploy-nginx.yaml
deployment.apps/nginx created
查看pod列表
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-64777cd554-4m2nj 1/1 Running 0 3m30s 10.244.1.15 node2 <none> <none>
nginx-64777cd554-lp8v2 1/1 Running 0 3m30s 10.244.1.16 node2 <none> <none>
nginx-64777cd554-w2m2t 1/1 Running 0 3m30s 10.244.2.9 node1 <none>
删除其中一个pod
[root@master ~]# kubectl delete pod nginx-64777cd554-4m2nj -n dev
pod "nginx-64777cd554-4m2nj" deleted
查看新的pod
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-64777cd554-lp8v2 1/1 Running 0 7m32s 10.244.1.16 node2 <none> <none>
nginx-64777cd554-rlbm8 1/1 Running 0 47s 10.244.1.17 node2 <none> <none>
nginx-64777cd554-w2m2t 1/1 Running 0 7m32s 10.244.2.9 node1 <none> <none>
发现ip地址和以前不一样了
虽然每个pod都会分配一个单独的pod ip,然而却存在如下问题:
- pod ip 会随着pod的重建产生变化
- pod ip仅仅是集群内可见的虚拟ip,外部无法访问
这样对于访问这个服务带来了难度,因此k8s设计了service来解决这个问题
service可以看作是一组同类pod对外的访问接口,借助service,应用可以方便地实现服务发现和负载均衡
9.1 创建集群内部可访问的service
暴露service
[root@master ~]# kubectl expose deployment nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
service/svc-nginx1 exposed
[root@master ~]# kubectl get service -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-nginx1 ClusterIP 10.100.210.11 <none> 80/TCP 44s
#这里产生了一个ClusterIP,这就是service的ip,在service的生命周期中,这个地址是不会变的,可以通过这个Ip访问当前service对应的pod
#访问service
[root@master ~]# curl 10.100.210.11:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
9.2 创建集群外部也可以访问的service
上面搭建的service的type类型为ClusterIP,这个ip地址只能集群内部可访问
如果需要创建外部也可以访问的Service,需要修改type为NodePort
[root@master ~]# kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev
service/svc-nginx2 exposed
[root@master ~]# kubectl get svc -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-nginx1 ClusterIP 10.100.210.11 <none> 80/TCP 20m
svc-nginx2 NodePort 10.104.222.53 <none> 80:32714/TCP 67s
在浏览器中访问
9.3 删除service
root@master ~]# kubectl delete svc svc-nginx2 -n dev
service "svc-nginx2" deleted
[root@master ~]# kubectl delete svc svc-nginx1 -n dev
service "svc-nginx1" deleted
9.4 使用配置方式
apiVersion: v1
kind: Service
metadata: name: svc-nginxnamespace: dev
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:run: nginxtype: ClusterIP
使用配置文件
[root@master ~]# vim svc-nginx.yaml
[root@master ~]# kubectl create -f svc-nginx.yaml
service/svc-nginx created
[root@master ~]# kubectl get svc -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-nginx ClusterIP 10.102.204.135 <none> 80/TCP 14s
删除
[root@master ~]# kubectl delete -f svc-nginx.yaml
service "svc-nginx" deleted
[root@master ~]# kubectl get svc -n dev
No resources found in dev namespace.
ete svc svc-nginx1 -n dev
service "svc-nginx1" deleted
~~~### 9.4 使用配置方式~~~shell
apiVersion: v1
kind: Service
metadata: name: svc-nginxnamespace: dev
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:run: nginxtype: ClusterIP
~~~使用配置文件```shell
[root@master ~]# vim svc-nginx.yaml
[root@master ~]# kubectl create -f svc-nginx.yaml
service/svc-nginx created
[root@master ~]# kubectl get svc -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-nginx ClusterIP 10.102.204.135 <none> 80/TCP 14s
删除
[root@master ~]# kubectl delete -f svc-nginx.yaml
service "svc-nginx" deleted
[root@master ~]# kubectl get svc -n dev
No resources found in dev namespace.
相关文章:

k8s_入门_命令详解
命令详解 kubectl是官方的CLI命令行工具,用于与 apiserver进行通信,将用户在命令行输入的命令,组织并转化为 apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径 1. 帮助 2. 查看版本信息 3. 查看资源对象等 查看No…...

腾讯、阿里、字节….等大厂都更喜欢什么样的简历?
我985毕业,为什么筛选简历时输给了一个普通一本? 我投了20份简历,为什么没有一个大厂回我? 每次HR收到简历就没下文了,是我的简历有问题吗? 诚然,在求职时,简历往往就是我们给予H…...

OpenHarmony实战:帆移植案例(中)
OpenHarmony实战:帆移植案例(上) Audio服务介绍 服务节点 基于ADM框架的audio驱动对HDI层提供三个服务hdf_audio_render、hdf_audio_capture、hdf_audio_control。 开发板audio驱动服务节点如下: console:/dev # ls -al hdf_au…...

武汉星起航:创始人张振邦智慧领航,孵化伙伴共绘跨境新蓝图!
在风起云涌的跨境电商行业中,武汉星起航电子商务有限公司如同一颗璀璨的明星,引领着众多创业者迈向成功的彼岸。而这一切的背后,都离不开公司创始人张振邦先生的卓越领导与深厚经验。他凭借着在电子商务行业多年的深耕与积累,为武…...
上下收缩、折叠面板
效果: 上下收缩、折叠面板,类似QQ好友列表那种。原理就是在一个布局中,通过button来实现一个独立widget的visible/disable 实现: 1.分组按钮 #ifndef EXPANDPANEL_H #define EXPANDPANEL_H#include <QWidget>class…...

XC7A35T-2FGG484 嵌入式FPGA现场可编程门阵列 Xilinx
XC7A35T-2FGG484 是一款由Xilinx(赛灵思)制造的FPGA(现场可编程门阵列)芯片 以下是XC7A35T-2FGG484 的主要参数: 1. 系列:Artix-7 2. 逻辑单元数量:33280个 3. 工艺技术:28nm 4. …...

淘宝订单API接口:电商业务自动化的新选择
淘宝订单API接口在电商业务自动化中扮演了至关重要的角色。首先,通过API接口,商家可以自动化地查询、创建、修改和删除订单,极大地提高了订单处理效率,减少了人工操作,降低了错误率。其次,商家可以实时获取…...

识典百科词条创建技巧,教你如何轻松创建热门识典百科词条!
网络已经成为人们获取知识和信息的主要途径。在这样一个背景下,识典百科作为一个综合性的网络百科全书,在为读者们提供各种知识的同时,也给广大用户提供了一个创建、编辑和分享知识的平台。如何在识典百科上创建一个高质量的词条,…...

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑)
引言 在 iOS 开发中,将 IPA 文件上传到苹果开发者中心是一个重要的步骤。通常情况下,我们需要使用 Mac 电脑上的 Xcode 或 Application Loader 工具来完成这个任务。然而,如果你没有 Mac 电脑,也没有关系,本文将介绍一…...
2024-04-08 问AI: 介绍一下AI 大神 吴恩达
文心一言 吴恩达(Andrew Ng)是AI领域的一位重要人物,他的贡献和影响力在学术界、工业界以及在线教育领域都极为显著。 吴恩达出生于1976年,是一位华裔美国人,他在斯坦福大学担任计算机科学系和电子工程系的副教授&am…...
Leetcode面试经典150_Q12整数转罗马数字
题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …...
Docker-compose部署Alertmanager+Dingtalk+Prometheus+Grafana实现钉钉报警
部署监控 version: 3.7services: #dingtalkdingtalk:image: timonwong/prometheus-webhook-dingtalk:latestcontainer_name: dingtalkrestart: alwayscommand:- --config.file/etc/prometheus-webhook-dingtalk/config.ymlvolumes:- /data/monitor/dingtalk/config.yml:/etc/p…...
算法刷题记录 Day40
算法刷题记录 Day40 Date: 2024.04.06 kamma 56. 多重背包 #include<bits/stdc.h> using namespace std;int main(){int n, c;while(cin>>c>>n){vector<int> weights(n, 0);vector<int> values(n, 0);vector<int> knums(n, 0);for(int …...

Android JNI基础
目录 一、JNI简介1.1 什么是JNI1.2 用途1.3 优点 二、初探JNI2.1 新建cpp\cmake2.2 build.gradle配置2.3 java层配置2.4 cmake和c 三、API详解3.1 JNI API3.1.1 数据类型3.1.2 方法 3.2 CMake脚本 四、再探JNI 一、JNI简介 1.1 什么是JNI JNI(Java Native Interfa…...
裙边挡边带是什么
裙边挡边带:了解其功能与应用 在日常生活和工业生产中,我们经常会遇到各种形状和功能的带子。其中,裙边挡边带是一种特殊类型的带子,它具有独特的结构和功能,被广泛应用于各种场合。本文将介绍裙边挡边带的基本概念、…...

chabot项目介绍
项目介绍 整体的目录如下所示: 上述的项目结构中出了model是必须的外,其他的都可以根据训练的代码参数传入进行调整,有些不需要一定存在data train.pkl:对原始训练语料进行tokenize之后的文件,存储一个list对象,list的每条数据表…...

ChromeOS 中自启动 Fcitx5 和托盘 stalonetray
ChromeOS 更新的飞快,旧文章的方法也老是不好用,找遍了也没找到很好的可以开机自启动 Linux VM 和输入法、托盘的方法。 研究了一下(不,是很久),终于找到个丑陋的实现。 方法基于 ChromeOS 123.0.6312.94…...

画图理解JVM相关内容
文章目录 1. JVM视角下,内存划分2. 类内存分布硬核详解1. 获取堆内存参数2. 扫描堆内存,定位实例3. 查看实例所在地址的数据4. 找到实例所指向的类信息的地址5. 查看class信息6. 结论 3. Java的对象创建流程4. 垃圾判别算法4.1 引用计数法4.2 可达性分析…...

Scikit-Learn K均值聚类
Scikit-Learn K均值聚类 1、K均值聚类1.1、K均值聚类及原理1.2、K均值聚类的优缺点1.3、聚类与分类的区别2、Scikit-Learn K均值聚类2.1、Scikit-Learn K均值聚类API2.2、K均值聚类初体验(寻找最佳K)2.3、K均值聚类案例1、K均值聚类 K-均值(K-Means)是一种聚类算法,属于无…...

蓝桥杯 - 受伤的皇后
解题思路: 递归 回溯(n皇后问题的变种) 在 N 皇后问题的解决方案中,我们是从棋盘的顶部向底部逐行放置皇后的,这意味着在任何给定时间,所有未来的行(即当前行之下的所有行)都还没…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...

Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...