2023年CKA考试真题及注意事项

2023年CKA考试真题及注意事项

  • 注意事项
    • 考试题目
    • 原题解析
    • 1.RBAC
    • 2.节点维护
    • 3.K8S组件升级 1.28.0升级到1.28.1
    • 4.Etcd备份与恢复
    • 5.NetworkPolicy
    • 6.Service
    • 7.Ingress
    • 8.指定节点部署
    • 9.检查Node节点健康状态
    • 10.一个Pod多个容器
    • 11.监控Pod度量指标
    • 12.监控Pod日志
    • 13.PersistentVolumeClaim
    • 14.Sidecar
    • 15.集群故障排查——kubelet故障

注意事项

1.黑色星期五(或Cyber Monday)时购买考试是全年价格最低的时候,推荐预算充足的同学购买CKA+CKS,性价比最高,相关课程不推荐买,video和课件都是纯英语,对英语一般的人不够友好,买后用处不大。
2.规定的是考试购买后1个月内需要兑换考试券(我超过1个月后兑换的虽然也成功了,但不建议卡时间)。
3.考试时间的选择,最好选择凌晨和清晨,比如早上6点左右,亲测网络不会卡顿。本人亲测在凌晨5-7点网络不卡。

4.浏览器和PSI插件按照指南说明准备,考前最好多测试多运行几次,确保系统环境一定没问题,比如我考时windows系统不能用win10企业版,所以需要重装系统或换个电脑。
5.关于网络,不建议在办公室等有公司防火墙的WiFi环境考试,很可能会看不到题目,可以选择在家或酒店,或者自己手机开热点这些方式。

考试题目

原题解析

1.RBAC

在这里插入图片描述
中文解释:
创建一个名为deployment-clusterrole的clusterrole,该clusterrole只允许创建Deployment、Daemonset、Statefulset的create操作
在名字为app-team1的namespace下创建一个名为cicd-token的serviceAccount,并且将上一步创建clusterrole的权限绑定到该serviceAccount

参考:

https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/

解题:

# 创建clusterrole
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets

# 或者
[root@k8s-master01 ~]# cat dp-clusterrole.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: deployment-clusterrole
rules:
- apiGroups: ["extensions", "apps"]
  resources: ["deployments","statefulsets","daemonsets"]
  verbs: ["create"]
[root@k8s-master01 ~]# kubectl create -f dp-clusterrole.yaml 
clusterrole.rbac.authorization.k8s.io/deployment-clusterrole created

# 创建serviceAccount
kubectl  create sa cicd-token -n app-team1 
serviceaccount/cicd-token created

# 绑定权限(推荐,节省时间)
kubectl create rolebinding deployment-rolebinding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1

或者
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: deployment-rolebinding
  namespace: app-team1
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: deployment-clusterrole
subjects:
- kind: ServiceAccount
  name: cicd-token
  namespace: app-team1

# 验证:
[root@k8smaster /opt/cka]# kubectl auth can-i create deployment --as system:serviceaccount:app-team1:cicd-token -n app-team1
yes
[root@k8smaster /opt/cka]# kubectl auth can-i create daemonset --as system:serviceaccount:app-team1:cicd-token -n app-team1   
yes
[root@k8smaster /opt/cka]# kubectl auth can-i create statefulset --as system:serviceaccount:app-team1:cicd-token -n app-team1   
yes
[root@k8smaster /opt/cka]# kubectl auth can-i create pod --as system:serviceaccount:app-team1:cicd-token -n app-team1   
no

2.节点维护

在这里插入图片描述
中文解释:
将ek8s-node-1节点设置为不可用,然后重新调度该节点上的所有Pod

参考:

https://kubernetes.io/zh/docs/tasks/configure-pod-container/
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#drain

解题:

kubectl config use-context ek8s
kubectl cordon ek8s-node-1
# 测试执行
kubectl drain ek8s-node-1 --delete-emptydir-data --ignore-daemonsets --force --dry-run=server
# 腾空节点
kubectl drain ek8s-node-1 --delete-emptydir-data --ignore-daemonsets --force

3.K8S组件升级 1.28.0升级到1.28.1

参考:

https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

解题:

首先腾空节点:
# 设置为维护状态
kubectl cordon k8s-master
# 驱逐Pod
kubectl drain k8s-master --delete-emptydir-data --ignore-daemonsets --force
# 之后需要按照题目提示ssh到一个master节点
apt update
apt-cache policy kubeadm | grep 1.28.1 
# 注意版本的差异,有可能并非1.20.1升级到1.28.1
apt-get install kubeadm=1.28.1-00
# 验证升级计划
kubeadm upgrade plan
# 看到如下信息,可升级到指定版本

# 开始升级Master节点,注意看题需不需要升级etcd
kubeadm upgrade apply v1.28.1 --etcd-upgrade=false -f

# 升级kubectl和kubelet
apt-get install -y kubelet=1.28.1-00 kubectl=1.28.1-00
systemctl daemon-reload
systemctl restart kubelet
# 恢复master可调度
kubectl uncordon k8s-master
node/k8s-master uncordoned

kubectl  get node
NAME           STATUS   ROLES                  AGE   VERSION
k8s-master01   Ready    control-plane,master   11d   v1.28.1
k8s-node01     Ready    <none>                 8d    v1.28.0
k8s-node02     Ready    <none>                 11d   v1.28.0

4.Etcd备份与恢复

在这里插入图片描述
中文解释:
针对etcd实例https://127.0.0.1:2379创建一个快照,保存到 /srv/data/etcd-snapshot.db。在创建快照的过程中,如果卡住了,就键入ctrl+c终止,然后重试。
然后恢复一个已经存在的快照:/var/lib/backup/etcd-snapshot-previous.db
执行etcdctl命令的证书存放在:
ca证书:/opt/KUIN00601/ca.crt
客户端证书:/opt/KUIN00601/etcd-client.crt
客户端密钥:/opt/KUIN00601/etcd-client.key

参考:

https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/

解题:

kubernetes的所有数据记录在etcd中,对etcd进行备份就是对集群进行备份。连接etcd需要证书,证书可以从apiserver获取,因为apiserver可以去连etcd。新版本的apiserver都是以static pod方式运行,证书通过volume挂载到pod中。
具体的证书路径和备份到的路径按题目要求设置。ssh到master节点很快,长时间没连上,可以中断重连。
恢复部分据说很容易卡住,不要花太多时间。

# 路径不存在的话要提前建出来
export ETCDCTL_API=3  
etcdctl --endpoints="https://127.0.0.1:2379" --cacert=/opt/KUIN000601/ca.crt --cert=/opt/KUIN000601/etcd-client.crt --key=/opt/KUIN000601/etcd-client.key snapshot save /srv/data/etcd-snapshot.db

# 还原
还原前最好关掉etcd服务,还原后重新开启etcd服务,
还原后etcd的状态可能有问题,最好不要去赌,失分可能性很大。
systemctl stop etcd

mkdir /opt/backup/ -p
cd /etc/kubernetes/manifests
mv kube-* /opt/backup

export ETCDCTL_API=3  
etcdctl --endpoints="https://127.0.0.1:2379" --cacert=/opt/KUIN000601/ca.crt --cert=/opt/KUIN000601/etcd-client.crt --key=/opt/KUIN000601/etcd-client.key snapshot restore /var/lib/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd-restore

vim /etc/kubernetes/manifests/etcd.yaml
# 将volume配置的path: /var/lib/etcd改成/var/lib/etcd-restore
  volumes:
  - hostPath:
      path: /etc/kubernetes/pki/etcd
      type: DirectoryOrCreate
    name: etcd-certs
  - hostPath:
      path: /var/lib/etcd-restore

# 修改数据目录权限
chown -R etcd.etcd /var/lib/etcd-restore

# 还原k8s组件
mv /opt/backup/* /etc/kubernetes/manifests
systemctl restart kubelet

systemctl start etcd

# 其他答案:
# 不需要进行集群的切换,etcdctl 工具主机上已存在,无需进行安装
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot save /var/lib/backup/etcd-snapshot.db 
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt  --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot restore /var/lib/backup/etcd-snapshot-previous.db 

注意:
如果是二进制安装的etcd,考试环境的etcd可能并非root用户启动的,所以可以先切换到root用户(sudo su -)
然后使用ps aux | grep etcd查看启动用户是谁和启动的配置文件是谁config-file字段指定,假设用户是etcd。所以如果是二进制安装的etcd,执行恢复时需要root权限,所以在恢复数据时,可以使用root用户恢复,之后更改恢复目录的权限:sudo chown -R etcd.etcd /var/lib/etcd-restore,
然后通过systemctl status etcd(或者ps aux | grep etcd)找到它的配置文件
(如果没有配置文件,就可以直接在etcd的service 通过systemctl status etcd即可看到文件中找到data-dir的配置),然后更改data-dir配置后,执行systemctl daemon-reload,最后使用etcd用户systemctl restart etcd即可。

5.NetworkPolicy

在这里插入图片描述
中文解释:
创建一个名字为allow-port-from-namespace的NetworkPolicy,这个NetworkPolicy允许internal命名空间下的Pod访问该命名空间下的9000端口。
并且不允许不是internal命令空间的下的Pod访问
不允许访问没有监听9000端口的Pod。
参考:

https://kubernetes.io/zh/docs/concepts/services-networking/network-policies/

解题:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: internal
spec:
  ingress:
  - from:
    - podSelector: {}
    ports:
    - port: 9000
      protocol: TCP
  podSelector: {}
  policyTypes:
  - Ingress

6.Service

在这里插入图片描述
中文解释:
重新配置一个已经存在的deployment front-end,在名字为nginx的容器里面添加一个端口配置,名字为http,暴露端口号为80/TCP,然后创建一个service,名字为front-end-svc,暴露该deployment的http端口,并且service的类型为NodePort。

解题:

kubectl edit deploy front-end
    spec:
      containers:
      - name: nginx
        image: nginx
        # 需要加这四行
        ports:
        - name: http
          containerPort: 80
          protocol: TCP


# 或者命令行添加service:
kubectl expose deploy front-end --name=front-end-svc  --port=80 --target-port=http --type=NodePort

# 或者通过文件方式创建service:
apiVersion: v1
kind: Service
metadata:
  name: front-end-svc
  labels:
    app: front-end
spec:
  type: NodePort
  selector:
    app: front-end   # label需要匹配,否则访问不到。
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80

7.Ingress

在这里插入图片描述
中文解释:
在ing-internal 命名空间下创建一个ingress,名字为pong,代理的service hi,端口为5678,配置路径/hi。
验证:访问curl -kL <INTERNAL_IP>/hi会返回hi。

解题:

# ingressClassName需指定为nginx
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /hi
        pathType: Prefix
        backend:
          service:
            name: hi
            port:
              number: 5678

kubectl get ingress -n ing-internal 获取ip后curl验证

# 如果考试环境没出ip需要在annotations下加一行
cat ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /hi
        pathType: Prefix
        backend:
          service:
            name: hi
            port:
              number: 5678

ingressclassname如果不指定,则会使用集群默认的指定的ingress。

Deployment扩缩容(4分)
在这里插入图片描述
解题:

kubectl config use-context k8s
kubectl scale --replicas=6 deployment loadbalancer
kubectl edit deploy loadbalancer

8.指定节点部署

在这里插入图片描述
解题:

vim pod-ns.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-kusc00401
  labels:
    role: nginx-kusc00401
spec:
  nodeSelector:
    disk: spinning
  containers:
    - name: nginx
      image: nginx

kubectl create -f pod-ns.yaml

# 省时
kubectl run nginx-kusc00401 --image=nginx --dry-run=client -o yaml > 9.yaml

9.检查Node节点健康状态

在这里插入图片描述
解题;

kubectl config use-context k8s
# 记录总数为A
kubectl get node|grep -i ready|wc -l  
# 记录总数为B
kubectl  describe node|grep Taints|grep NoSchedule|wc -l
# 将A减B的值x导入到/opt/KUSC00402/kusc00402.txt
echo x >> /opt/KUSC00402/kusc00402.txt

# 切换到指定集群
kubectl config use-context [NAME]
# Ready 状态的节点数减去 NoSchedule 状态的节点数
kubectl get node |grep -i ready 
kubectl describe node |grep -i 'taints'
echo '2' >> /opt/KUSC00402/kusc00402.txt

10.一个Pod多个容器

在这里插入图片描述
中文解释:
创建一个Pod,名字为kucc1,这个Pod可能包含1-4容器,该题为四个:nginx+redis+memcached+consul
解题:

apiVersion: v1
kind: Pod
metadata:
  name: kucc1
spec:
  containers:
  - image: nginx
    name: nginx
  - image: redis
    name: redis
  - image: memchached
    name: memcached
  - image: consul
    name: consul

# 或者用dry-run=client的命令快速生成yaml模板,修改yaml,加入新容器进去
kubectl run kucc1 --image=nginx --dry-run=client -o yaml > 11.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: kucc1
  name: kucc1
spec:
  containers:
  - image: nginx
    name: nginx
  - image: redis
    name: redis
  - image: memcached
    name: memcached
  - image: consul
    name: consul
  dnsPolicy: ClusterFirst
  restartPolicy: Always

PersistentVolume(4分)
在这里插入图片描述
中文解释:
创建一个pv,名字为app-config,大小为2Gi,访问权限为ReadWriteMany。Volume的类型为hostPath,路径为/srv/app-config

apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-config
  labels:
    type: local
spec:
  storageClassName: manual   # 需要有这一项吗?题目没有要求,(可以不写)
  volumeMode: Filesystem
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/srv/app-config"

kubectl get pv app-config

11.监控Pod度量指标

在这里插入图片描述
中文解释:
找出具有name=cpu-user的Pod,并过滤出使用CPU最高的Pod,然后把它的名字写在已经存在的 /opt/KUTR00401/KUTR00401.txt文件里(注意他没有说指定namespace。所以需要使用-A指定所以namespace)
解题:

kubectl config use-context k8s
kubectl  top pod -A -l name=cpu-user
NAMESPACE     NAME                       CPU(cores)   MEMORY(bytes)   
kube-system   coredns-54d67798b7-hl8xc   7m           8Mi   
kube-system   coredns-54d67798b7-m4m2q   6m           8Mi

# 注意这里的pod名字以实际名字为准,按照CPU那一列进行选择一个最大的Pod,另外如果CPU的数值是1 2 3这样的。是大于带m这样的,因为1颗CPU等于1000m
注意要用">>"而不是">"
echo "coredns-54d67798b7-hl8xc" >> /opt/KUTR00401/KUTR00401.txt

# 其他解法:
kubectl get pods -A --show-labels
kubectl top pods -A -l name=cpu-user --sort-by="cpu"
echo "[podname]" >> /opt/KUTR00401/KUTR00401.txt

12.监控Pod日志

在这里插入图片描述
中文解释:
监控名为foobar的Pod的日志,并过滤出具有unable-access-website信息的行,然后将写入到 /opt/KUTR00101/foobar
解题:

kubectl config use-context k8s
kubectl logs foobar|grep 'unable-access-website' >> /opt/KUTR00101/foobar

13.PersistentVolumeClaim

在这里插入图片描述
中文翻译:
创建一个名字为pv-volume的pvc,指定storageClass为csi-hostpath-sc,大小为10Mi
然后创建一个Pod,名字为web-server,镜像为nginx,并且挂载该PVC至/usr/share/nginx/html,挂载的权限为ReadWriteOnce。之后通过 kubectl edit或者 kubectl path将pvc改成70Mi,并且记录修改记录。
解题:

# 创建PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  accessModes:
  - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 10Mi
  storageClassName: csi-hostpath-sc

# 创建Pod
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
      - mountPath: "/usr/share/nginx/html"
        name: pv-volume   # 名字不是必须和pvc一直,也可以为my-volume
  volumes:
    - name: pv-volume   # 名字不是必须和pvc一直,也可以为my-volume
      persistentVolumeClaim:
        claimName: pv-volume

# 扩容
# 方式一patch命令:
kubectl patch pvc pv-volume  -p '{"spec":{"resources":{"requests":{"storage": "70Mi"}}}}' --record

# 方式二edit:
kubectl edit pvc pv-volume 
# 记录修改记录,需要加--record参数或--save-config
kubectl edit pvc pv-volume --record
kubectl edit pvc pv-volume --save-config
将两处10Mi都改为70Mi,如果是nfs,会因为不支持动态扩容而失败。
edit完需要稍等一会儿,容量才会变为70Mi

14.Sidecar

在这里插入图片描述
添加一个名为busybox且镜像为busybox的sidecar到一个已经存在的名为legacy-app的Pod上,这个sidecar的启动命令为 /bin/sh, -c, ‘tail -n+1 -f /var/log/legacy-app.log’。
并且这个sidecar和原有的镜像挂载一个名为logs的volume,挂载的目录为/var/log/。

解题:

kubectl get pod legacy-app -o yaml > c-sidecar.yaml
apiVersion: v1
kind: Pod
metadata:
  name: legacy-app
spec:
  containers:
  - name: count
    image: busybox
    args:
    - /bin/sh
    - -c
    - >
      i=0;
      while true;
      do
        echo "$(date) INFO $i" >> /var/log/legacy-ap.log;
        i=$((i+1));
        sleep 1;
      done   

# 在此yaml中添加sidecar和volume
vim c-sidecar.yaml
apiVersion: v1
kind: Pod
metadata:
  name: legacy-app
spec:
  containers:
  - name: count
    image: busybox
    args:
    - /bin/sh
    - -c
    - >
      i=0;
      while true;
      do
        echo "$(date) INFO $i" >> /var/log/legacy-ap.log;
        i=$((i+1));
        sleep 1;
      done  
    # 加上下面部分
    volumeMounts:
    - name: logs
      mountPath: /var/log
  - name: busybox
    image: busybox
    args: [/bin/sh, -c, 'tail -n+1 -f /var/log/legacy-ap.log']
    volumeMounts:
    - name: logs
      mountPath: /var/log
  volumes:
  - name: logs
    emptyDir: {}

kubectl delete -f c-sidecar.yaml
kubectl create -f c-sidecar.yaml

# 检查
[root@k8smaster /opt/cka]# kubectl logs legacy-app -c busybox 

15.集群故障排查——kubelet故障

在这里插入图片描述
中文解释:
一个名为wk8s-node-0的节点状态为NotReady,让其他恢复至正常状态,并确认所有的更改开机自动完成
解题:

# 检查wk8s-node-0 kubelet服务状态
ssh wk8s-node-0
sudo su - 
systemctl status kubelet 
systemctl start kubelet
systemctl enable kubelet

其实这题没这么简单,一般启动kubelet后大概率是启动失败的
可能的原因:
1.kubelet二进制文件路径不对,which kubelet后和服务启动文件kubelet systemd service做个对比,看是否是这个原因
2.service文件路径和它启动的路径不一致,在启动目录下找不到service文件,可以全局搜下并做个软链接。
3.其他原因。

# 再次检查wk8s-node-0是否在ready
ssh master01
kubectl get nodes

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

淘宝开放平台订单接口免申请审核接入规则

大家都知道&#xff0c;想要实现自动化批量获取淘宝的商品订单数据&#xff0c;离不开淘宝开放平台API接口。想要获取API调用权限&#xff0c;需要经过淘宝开放平台的严苛审核流程。并且&#xff0c;现在平台基本不开放新的应用权限了。像很多做ERP的公司&#xff0c;他们的客户…

Qt 线程串口

文章目录 ui设置创建线程函数初始串口run函数接收发送数据读取数据处理读取的数据写入数据写入启动的命令 主线程 ui设置 创建线程函数 #include <QObject> #include <QThread> #include <QSerialPort> #include <QSerialPortInfo>class SerialPort :…

Leetcode刷题详解——解数独

1. 题目链接&#xff1a;37. 解数独 2. 题目描述&#xff1a; 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能…

微信小程序_02

能够使用WXML模版语法渲染页面结构 数据绑定 1、数据绑定的基本原则 在data中定义数据在WXML中使用数据 2、在data中定义页面的数据 ​ 在页面对应的.js文件中&#xff0c;把数据定义到data对象中即可&#xff1a; Page({data:{//字符串类型的数据info:init data,//数组类…

【python自动化】Playwright基础教程(七)Keyboard键盘

【python自动化】Playwright基础教程(七)Keyboard键盘 playwright模拟键盘操作 键盘事件提供了用于管理虚拟键盘的API&#xff0c;高级API是keyboard.type()&#xff0c;它使用的是原始字符再页面上生成对应的keydown 、 keypress / input 和 keyup 事件。 模拟真实键盘操作进行…

【网络奇幻之旅】那年我与大数据的邂逅

&#x1f33a;个人主页&#xff1a;Dawn黎明开始 &#x1f380;系列专栏&#xff1a;网络奇幻之旅 ⭐每日一句&#xff1a;循梦而行&#xff0c;向阳而生 &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️ 文章目录 &#x1f4…

Python GUI - Tkinter 添加应用程序图标(程序左上角)

将ico图标文件放在py文件同级目录&#xff0c;然后加上以下代码 root.iconbitmap("./test.ico")

Linux centos安装SQL Server数据库,结合cpolar内网穿透实现公网访问

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具&#xff0…

西部数码的域名如何实现DDNS功能

功能简介&#xff1a; 动态域名解析&#xff08;Dynamic DNS&#xff0c;简称DDNS&#xff09;可以让用户使用固定的域名来访问动态IP地址&#xff0c;解决因IP地址变化造成服务无法访问的情况。 本文将介绍如何使用西部数码的API实现DDNS功能&#xff0c;使您的域名始终指向您…

MySQL索引优化

EXPLAIN详解 优先了解EXPLAIN&#xff0c;文章链接在下面。 EXPLAIN详解&#xff08;MySQL&#xff09; 索引数据结构 MySQL主要有两种结构&#xff1a;hash索引和BTree索引&#xff0c;InnoDB引擎默认是BTree索引。 索引分类 聚簇索引&#xff1a; 指索引的键值的逻辑顺…

乡镇村污水处理智慧水务智能监管平台,助力污水监管智慧化、高效化

一、背景与需求 随着城市化进程的加速&#xff0c;排放的污水量也日益增加&#xff0c;导致水污染严重。深入打好污染防治攻坚战的重要抓手&#xff0c;对于改善城镇人居环境&#xff0c;推进城市治理体系和治理能力现代化&#xff0c;加快生态文明建设&#xff0c;推动高质量…

Facebook个人主页和公共主页的区别

Facebook个人主页和公共主页是两种不同类型的页面&#xff0c;它们在功能、用途和管理方面上都是存在着一些明显的区别。本文小编则对他们的区别介绍一下。 首先&#xff0c;个人主页是供普通用户使用的&#xff0c;用于展示个人信息和与朋友、家人保持联系。个人主页通常包括…

阿里云国际站:专有网络vpc

文章目录 一、阿里云专有网络的概念 二、专有网络的组成部分 三、专有网络的优势 一、阿里云专有网络的概念 专有网络VPC是阿里云用户在云上创建的私有网络&#xff0c;用户自己掌控&#xff0c;可以自定义IP地址段、创建交换机、配置路由表和网关等操作。用户可以在自己的专…

VR建筑仿真场景编辑软件有助于激发创作者的灵感和创造力

随着VR虚拟现实技术的不断发展和普及&#xff0c;VR虚拟场景编辑器逐渐成为了VR场景开发重要工具。它对于丰富和完善VR虚拟现实内容的创建和呈现具有重要的意义&#xff0c;为我们的工作和教学带来了许多变化和可能性。 首先&#xff0c;VR虚拟场景编辑器对于提升用户体验具有重…

ChatGPT重磅升级 奢侈品VERTU推出双模型AI手机

2023年11月7日,OpenAI举办了首届开发者大会,CEO Sam Altman(山姆奥尔特曼)展示了号称“史上最强”AI的GPT-4 Turbo。它支持长达约10万汉字的输入,具备前所未有的长文本处理能力,使更复杂的互动成为可能。此外,GPT-4 Turbo还引入了跨模态API支持,可以同时处理图片、视频和声音,从…

springboot运维篇--springboot项目打包

1.springboot项目jar方式部署 直接使用idea 直接使用命令 跳过测试用例快速打包 mvn clean -D skipTests package将这个应用打成jar包&#xff0c;直接使用java-jar的命令执行 需要注意的是&#xff0c;需要 jar 命令行启动需要依赖 Maven 插件的支持&#xff0c;必须确认在…

软考网络工程师知识点总结(三)

目录 41、特殊地址 42、子网划分 43、CIDR路由汇聚 44、IP数据报 45、ARP协议 46、ICMP协议 47、IPv6地址表示及类型 48、IPv6地址前缀 49、IPv4过渡IPv6 50、UDP传输层协议 51、TCP传输层协议 52、TCP头部中常见字段的含义&#xff1a; 53、TCP的流量控制和拥塞控…

浏览器插件实现国税网自动登录,以及解决浏览器记住密码会自动填充表单无法修改的问题

公司的做账系统&#xff0c;用户在系统里设置保存了国税网的账号密码以后&#xff0c;下次点击进入国税网&#xff0c;能够直接进入国税系统。 之前的解决方案是pupptteer模拟登录一遍拿到cookie等登录凭证后&#xff0c;保存到数据库&#xff0c;然后插件请求接口拿到cookie&…

Illumination Adaptive Transformer

Abstract. 现实世界中具有挑战性的照明条件&#xff08;低光、曝光不足和曝光过度&#xff09;不仅会产生令人不快的视觉外观&#xff0c;还会影响计算机视觉任务。现有的光自适应方法通常单独处理每种情况。更重要的是&#xff0c;它们中的大多数经常在 RAW 图像上运行或过度…

Linux进程地址空间

文章目录 1.程序地址空间回顾2.进程地址空间 1.程序地址空间回顾 我们在讲C语言的时候&#xff0c;老师给大家画过这样的空间布局图 可是我们对他并不理解&#xff01; 来段代码感受一下: #include <stdio.h> #include <unistd.h> #include <stdlib.h> in…