【云原生】搭建k8s高可用集群—20230225

news2024/12/22 19:59:44

文章目录

    • 多master(高可用)介绍
    • 高可用集群使用技术介绍
    • 搭建高可用k8s集群步骤
      • 1. 准备环境-系统初始化
      • 2. 在所有master节点上部署keepalived
        • 3.1 安装相关包
        • 3.2 配置master节点
        • 3.3 部署haproxy
          • 错误解决
      • 3. 所有节点安装Docker/kubeadm/kubelet
      • 4. 部署Kubernetes Master
        • 4.1 创建kubreadm配置文件
        • *初始化节点*
        • 4.2 在master1节点执行
      • 5. 安装集群网络
      • 6. master2、master3节点加入集群
        • 6.1 复制密钥及相关文件
        • 6.2 master2和master3加入到集群
      • 7. 加入Kubernetes Node
        • 报错解决
      • 8. 测试kubernetes集群
      • 9. 模拟

多master(高可用)介绍

在这里插入图片描述

假设现在有3个node节点和3个master节点,node1到底是连到master1还是连到master2还是master3,需要有人来分配,这个中间人就是load balancer,load balancer起到两个作用,一是负载。二是检查master状态,如果master1异常,就会使node连到master2上,如果master1正常,则正常提供服务。由于节点之间互相访问是通过IP连接,这里也是一样的,只不过是通过VIP(虚拟ip)连接。

高可用集群使用技术介绍

keepalived:检查master状态,是否正常运行;配置虚拟IP。
haproxy:负载均衡服务器,起到负载作用。
master具体组件:apiserver, controller-manager, scheduler。
在这里插入图片描述

搭建高可用k8s集群步骤

前提条件:
①固定四台主机IP,参考文章固定虚拟机IP
②可连外网

主机IP
master1192.168.2.200
master2192.168.2.201
master3192.168.2.204
node1192.168.2.202
虚拟IP192.168.2.203

我们以3台master,1台node为例,首先准备好4台服务器,分别在四台服务器上做操作。

1. 准备环境-系统初始化

# 关闭防火墙
systemctl stop fierwalld  #临时关闭
systemctl disable fierwalld  #永久关闭

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时

# 关闭swap分区
swapoff -a  #临时
sed -ri 's/.*swap.*/#&/' /etc/fstab  #永久

# 根据规划设置主机名
hostnamectl set-hostname <hostname>

# 在master中添加hosts,每一个master都要执行
cat >> /etc/hosts << EOF
192.168.2.203 k8s-vip
192.168.2.200 master1
192.168.2.201 master2
192.168.2.202 node1
EOF

# 将桥接的 IPv4 流量传递到 iptables 的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system   # 生效

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

2. 在所有master节点上部署keepalived

3.1 安装相关包

# 安装相关工具
yum install -y conntrack-tools libseccomp libtool-ltdl
# 安装keepalived
yum install -y keepalived

3.2 配置master节点

  1. master1节点配置:
cat > /etc/keepalived/keepalived.conf <<EOF 
! Configuration File for keepalived

global_defs {
   router_id k8s
}

vrrp_script check_haproxy {
    script "killall -0 haproxy"
    interval 3
    weight -2
    fall 10
    rise 2
}

vrrp_instance VI_1 {
    state MASTER 
    interface ens33     # ens33 为网卡名称
    virtual_router_id 51
    priority 250
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass ceb1b3ec013d66163d6ab
    }
    virtual_ipaddress {
        192.168.2.203    # 虚拟ip
    }
    track_script {
        check_haproxy
    }

}
EOF
  1. master2、master3节点配置
cat > /etc/keepalived/keepalived.conf <<EOF 
! Configuration File for keepalived

global_defs {
   router_id k8s
}

vrrp_script check_haproxy {
    script "killall -0 haproxy"
    interval 3
    weight -2
    fall 10
    rise 2
}

vrrp_instance VI_1 {
    state BACKUP 
    interface ens33    # ens33 为网卡名称
    virtual_router_id 51
    priority 200
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass ceb1b3ec013d66163d6ab
    }
    virtual_ipaddress {
        192.168.2.203    # 虚拟ip
    }
    track_script {
        check_haproxy
    }

}
EOF
  1. 启动和检查
    三台master节点都执行
# 启动keepalived
systemctl start keepalived.service
# 设置开机启动
systemctl enable keepalived.service
# 查看启动状态
systemctl status keepalived.service

启动后查看master的网卡信息。由于虚拟IP配到了master1上,执行后,master1节点上会多出一个IP,即为虚拟IP;master2和master3上没有,挂上master1后才会出现。

ip a s ens33

在这里插入图片描述

3.3 部署haproxy

  1. 在3个master节点安装 haproxy
# 安装haproxy
yum install -y haproxy
  1. 配置
    3台master节点的配置均相同,配置中声明了后端代理的3个master节点服务器,指定了haproxy运行的端口为16443等,因此16443端口为集群的入口
cat > /etc/haproxy/haproxy.cfg << EOF
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2
    
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon 
       
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------  
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
#---------------------------------------------------------------------
# kubernetes apiserver frontend which proxys to the backends
#--------------------------------------------------------------------- 
frontend kubernetes-apiserver
    mode                 tcp
    bind                 *:16443      #默认监听端口16443
    option               tcplog
    default_backend      kubernetes-apiserver    
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend kubernetes-apiserver
    mode        tcp
    balance     roundrobin
    server      master01.k8s.io   192.168.2.200:16443 check    # 修改IP
    server      master02.k8s.io   192.168.2.201:16443 check    # 修改IP
    server      master03.k8s.io   192.168.2.204:16443 check    # 修改IP
#---------------------------------------------------------------------
# collection haproxy statistics message
#---------------------------------------------------------------------
listen stats
    bind                 *:1080
    stats auth           admin:awesomePassword
    stats refresh        5s
    stats realm          HAProxy\ Statistics
    stats uri            /admin?stats
EOF
  1. 启动和检查
    两台master都启动
# 启动 haproxy
systemctl start haproxy
# 设置开启自启
systemctl enable haproxy
# 查看启动状态
systemctl status haproxy

启动后,检查端口,查看对应的端口是否包含 16443

netstat -tunlp | grep haproxy

在这里插入图片描述

错误解决

报错:
在这里插入图片描述
针对这个问题出现的原因,就是Linux缺少对应的包,使用命令安装即可: yum install -y net-tools。再次执行netstat命令即可。

3. 所有节点安装Docker/kubeadm/kubelet

所有节点安装Docker/kubeadm/kubelet ,Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

  • 安装之前确保没有其他dockers版本,如果有,需要删除干净后再安装,卸载方式可以参考这篇文章卸载docker。
  1. 安装Docker,所有master+node都要安装
# 下载镜像
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 
# 安装docker
yum -y install docker-ce-18.06.1.ce-3.el7 
# 开机自启动并且启动docker
systemctl enable docker && systemctl start docker 
# 查看docker状态
systemctl status docker
# 查看docker版本
docker --version
# 设置仓库地址
cat > /etc/docker/daemon.json << EOF 
{
 "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] 
}
EOF
# 重启docker
systemctl restart docker
  1. 添加阿里云yum源,所有节点(master+node)
cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
# 重启docker
systemctl restart docker
  1. 添加kubernetes软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  1. 安装kubeadm,kubectl,kubelet
    由于版本更新频繁,这里指定版本号部署:
# 安装kubelet、kubeadm、kubectl,同时指定版本
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 设置开机启动
systemctl enable kubelet

4. 部署Kubernetes Master

4.1 创建kubreadm配置文件

在具有vip的master上进行初始化操作,这里为master1

# 创建文件夹
mkdir /usr/local/kubernetes/manifests -p
# 到manifests目录
cd /usr/local/kubernetes/manifests/
# 新建yaml文件
vim kubeadm-config.yaml

下面内容修改IP 后复制进去

apiServer:
  certSANs:
    - master1
    - master2
    - master3
    - k8s-vip    #虚拟IP的名字,需和/etc/hosts里一致
    - 192.168.2.203    # 虚拟IP
    - 192.168.2.200    # master1
    - 192.168.2.201    # master2
    - 192.168.2.204    # master3
    - 127.0.0.1
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta1
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "k8s-vip:16443"    #虚拟IP:16443
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.1.0.0/16
scheduler: {}

初始化节点

如果上面的yaml文件已经执行过一次,再次执行就会报错,这时,就需要将集群初始化。
步骤:

# 1. 还原由 kubeadm init 或 kubeadm join 所做的更改
kubeadm reset -f
# 2. 删除相关文件
rm -rf /etc/kubernetes/*
rm -rf /var/lib/etcd/*

然后再次执行yaml文件

4.2 在master1节点执行

kubeadm init --config kubeadm-config.yaml

执行完成后,就会在拉取镜像【需要等待…】
按照提示配置环境变量,使用kubectl工具

# 执行下方命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看节点
kubectl get nodes
# 查看pod
kubectl get pods -n kube-system

在这里插入图片描述
在这里插入图片描述
由于没有安装网络插件,所以会有pending状态,无妨,继续往下执行就好了。

按照提示保存以下内容,一会要使用

kubeadm join k8s-vip:16443 --token ivcq40.a1bb605g6df4xhdw \
    --discovery-token-ca-cert-hash sha256:b65dcb57a2934439562ae138f552942600296edc04cdefb7da93031cf23c9a08 \
    --control-plane

–control-plane : 只有在添加master节点的时候才有

# 查看集群健康状态
kubectl get cs
# 查看pod
kubectl get pods -n kube-system

5. 安装集群网络

从官方地址获取到flannel的yaml,在master1上执行

# 创建文件夹
mkdir flannel
cd flannel
# 下载yaml文件
wget -c https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

安装flannel网络

kubectl apply -f kube-flannel.yml 

检查,都已经running,且master已经ready

kubectl get pods -n kube-system

在这里插入图片描述
在这里插入图片描述

6. master2、master3节点加入集群

6.1 复制密钥及相关文件

从master1复制密钥及相关文件到master2

## master1中执行,修改IP,分别改为master2/3的IP执行2遍
# ssh root@192.168.2.201 mkdir -p /etc/kubernetes/pki/etcd   # 修改IP;master2\master3的IP,用master1连接master2\master3;输入密码

# scp /etc/kubernetes/admin.conf root@192.168.2.201:/etc/kubernetes
   
# scp /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-ca.*} root@192.168.2.201:/etc/kubernetes/pki
   
# scp /etc/kubernetes/pki/etcd/ca.* root@192.168.2.201:/etc/kubernetes/pki/etcd

6.2 master2和master3加入到集群

在master2、master3上执行在master1上init后输出的join命令,需要带上参数–control-plane表示把master控制节点加入集群。

# master2上执行
kubeadm join k8s-vip:16443 --token ivcq40.a1bb605g6df4xhdw \
    --discovery-token-ca-cert-hash sha256:b65dcb57a2934439562ae138f552942600296edc04cdefb7da93031cf23c9a08 \
    --control-plane

按照提示执行输出的3行命令
在这里插入图片描述
检查状态

kubectl get nodes

kubectl get pods --all-namespaces

在这里插入图片描述

7. 加入Kubernetes Node

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令,不加参数–control-plane

# 在node1上执行
kubeadm join k8s-vip:16443 --token ivcq40.a1bb605g6df4xhdw \
    --discovery-token-ca-cert-hash sha256:b65dcb57a2934439562ae138f552942600296edc04cdefb7da93031cf23c9a08

报错解决

执行命令后,报错no such host,如下:
在这里插入图片描述
这时候,需要将node1节点里的hosts表里的内容保持与master节点一致,再次执行就可以了。
在这里插入图片描述

在这里插入图片描述


集群网络重新安装,因为添加了新的node节点

# 在master1节点上执行
 kubectl apply -f flannel/kube-flannel.yml

检查状态

kubectl get nodes
kubectl get pods --all-namespaces

8. 测试kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

# 创建nginx deployment
kubectl create deployment nginx --image=nginx
# 暴露端口
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
# 查看状态
kubectl get pod,svc

在这里插入图片描述
然后通过任何一个master或node节点或者虚拟IP加上端口号,都能够访问nginx页面;如果想要通过域名访问服务,可以参考这篇文章
在这里插入图片描述

9. 模拟

我们现在有3个master节点,1个node节点,经过上述测试,发现集群可以正常访问nginx服务,因为三台master在正常运行,我们现在模拟挂掉一台master,让另外2台master正常运行,看一下会有什么效果:

  1. 首先,先查看集群是否正常,执行kubectl get nodes命令,发现各个节点都处于ready状态
    在这里插入图片描述
  2. 我们现在把master3这台服务器关掉,再看集群状态,关掉一会之后,发现master3节点状态变成了NotReady。
    在这里插入图片描述
    我们再使用其他节点的IP加上端口号访问nginx试一下,发现可以正常访问;如果使用master3节点的IP加端口号就无法访问nginx,是因为master3服务器已经关闭。
    在这里插入图片描述
  3. 到现在为止,我们有2台正在运行的master,现在我们再关闭一台master,把master2也关掉,只留一台master,试一下会怎么样?
    关闭前的状态:
    在这里插入图片描述
    关闭后再次执行kubectl get nodes命令,发现报错了,显示无法连接到服务器。
    在这里插入图片描述
    虽然这时候在访问nginx还是可以正常访问,但是此时的集群已经坏掉了。
    所以,如果有3个master节点,必须要保证2个正常运行;如果有5个master,必须保证3个正常运行。假设有N个master节点,必须保证有(N+1)/2个节点正常运行,才能保证集群正常。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《痞子衡嵌入式半月刊》 第 72 期

痞子衡嵌入式半月刊&#xff1a; 第 72 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly)&#xff0c;欢迎提交 issue&#xff0c…

【华为OD机试模拟题】用 C++ 实现 - 求解连续数列+和最大子矩阵(2023.Q1 双倍快乐)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明求解连续数列题目输入输出描述示例一输入输出Code和最大子矩阵题目输入输出示例一输入输出说明

CMU15-445 Project.0总结

在线测试 本地测试 Project #0 - C Primer 以下是Project #0的网址&#xff0c;2022FALL的Project #0本质上是实现一棵字典树&#xff0c;关于字典树的相关内容可以参考C实现字典树。 在本题中&#xff0c;为了存储对应着字符串的任意类型值&#xff0c;题目设计了一个Tri…

CV——day79 读论文:基于小目标检测的扩展特征金字塔网络

Extended Feature Pyramid Network for Small Object DetectionI. INTRODUCTIONII. RELATED WORKA. 深层物体探测器B. 跨尺度特征C. 目标检测中的超分辨率III. OUR APPROACHA. 扩展特征金字塔网络B. 特征纹理传输C. 交叉分辨蒸馏IV. EXPERIMENTSA. Experimental Settings1&…

SEATA是什么?它的四种分布式事务模式

一、SEATA是什么&#xff1f; Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 在继续学习使用SEATA之前&#xff0c;对s…

电子科技大学数据库与软件工程实验五

适用于网工和物联网专业 期末考试会考 目录 一、实验目的 二、实验内容 三、实验软件 四、实验步骤及数据记录 1. 权限管理 2. 数据库备份 3. 生成 AWR 报告 五、实验结论及思考题 六、总结及心得体会 七、对本实验过程及方法、手段的改进建议 一、实验目的 1、掌握…

工作九年的机器人讲师收入如何

如下都是个人情况&#xff0c;供各位朋友参考&#xff0c;仅为个人情况&#xff0c;只代表我个人。为何写这样一篇博客&#xff1a;看了最近的热点我在一所普普通通的不知名高校工作了九年。如果问及我存款……我实在是非常非常惭愧的。真实数值如下&#xff08;组合贷&#xf…

【数据库】第八章 数据库编程

第八章 数据库编程 8.1 嵌入式SQL&#xff08;C语言版&#xff09; 被嵌入的语言&#xff08;java ,C)等被称为宿主语言&#xff0c;简称主语言 当主语言 为 C 语言的时候 ​ 语法格式为 EXEC SQL <SQL语句>当主语言为java的时候 格式为 #SQL {<SQL语句>}以下讲解…

MATLAB | 如何解决实验数据散点图重叠问题(overlap)

本期部分实验效果&#xff1a; 这期讲一下如果数据重合严重该咋办(overlap)&#xff0c;事先说明&#xff0c;本文中的绘图均使用一个几行的简单小代码进行了修饰&#xff1a; function defualtAxes axgca;hold on;box on ax.XGridon; ax.YGridon; ax.XMinorTickon; ax.YMinor…

Redis 之企业级解决方案

文章目录一、缓存预热二、缓存雪崩三、缓存击穿四、缓存穿透五、性能指标监控5.1 监控指标5.2 监控方式&#x1f34c;benchmark&#x1f34c;monitor&#x1f34c;slowlog提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 一、缓存预热 1.1 现象…

云服务器产生背景与历史演进

云服务器产生背景  业务量爆发和衰退周期考验后端服务器性能匹配 在传统IT架构中&#xff0c;需要提前预估业务爆发时间和业务量&#xff0c;提前部署服务器以支撑业务。但是&#xff0c;往往预估与实际结果是有差距的&#xff0c;预估量过大会造成服务器采购成本高&#x…

阿里巴巴内网 Java 面试 2000 题解析(2023 最新版)

前言 这份面试清单是今年 1 月份之后开始收集的&#xff0c;一方面是给公司招聘用&#xff0c;另一方面是想用它来挖掘在 Java 技术栈中&#xff0c;还有一些知识点是我还在探索的&#xff0c;我想找到这些技术盲点&#xff0c;然后修复它&#xff0c;以此来提高自己的技术水平…

2016年chatGPT之父Altman与马斯克的深度对话(值得一看)

2016年9月&#xff0c;现今OpenAI CEO&#xff0c;ChatGPT之父&#xff0c;时任创投公司Y Combinator的总裁Sam Altman在特斯拉加州弗里蒙特工厂采访了埃隆马斯克。马斯克阐述了创建OpenAI的初衷&#xff0c;以及就他而言&#xff0c;对于未来最为重要的五件事。这是OpenAI的两…

【概念辨析】大小端存储

一、情境 在进行内存调试窗口的查看时&#xff0c;是不是会有一种错觉&#xff0c;就是它存的数据与我们预期的都是颠倒的&#xff0c;比如&#xff1a; 这里的a就和我们预期的不是很相同。 二、大小端 大小端是计算机厂家根据自己的习惯制定的关于数据字节序的规则。 1.大端…

2023中职网络安全竞赛Web安全应用任务解析答案

Web安全应用 任务环境说明: 服务器场景:match_win03-4-1(关闭链接)服务器场景操作系统:Windows Server 2003 使用渗透机Kali Linux,访问靶机FTP服务,下载靶机网站中的部分源码并分析,将源码文件post.php中${flag1}空缺处应填写的函数作为Flag值提交。Flag:isset 使用…

程序设计语言(做题)

程序设计语言部分一、高级语言与低级语言1、低级语言&#xff08;面向机器&#xff09;2、高级语言&#xff08;面向对象&#xff09;二、编译程序与解释程序1、区别2、流程&#xff08;加粗点为不可省略过程&#xff0c;顺序不可变&#xff09;&#xff08;1&#xff09;词法分…

(指针内容)当你申请一个变量,在这期间内存会发生什么?

一. 前言C语言是比较偏底层的语言&#xff0c;为什么他比较偏底层&#xff0c;就是因为他的很多操作都是直接针对内存操作的。这篇我们就来讲解C语言的一大特点&#xff0c;也是难点&#xff0c;指针和指针操作。这篇文章我会先从基本类型的存储过程和原理讲起&#xff0c;然后…

【Docker】命令总结

目录 1.镜像命令 1.1拉取镜像 1.2查看镜像 1.3保存镜像 1.4导入镜像 2.容器命令 2.1创建并运行容器 2.2删除容器 2.3进入容器 2.4查看容器状态 2.5暂停容器 2.6恢复容器 2.7停止容器 2.8启动容器 2.8查看容器日志 3.数据卷命令 3.1创建数据卷 3.2查看所有数据…

C语言刷题(2)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰来复习一下之前所学过的内容噢&#xff0c;复习的方式&#xff0c;那当然是刷题啦&#xff0c;现在&#xff0c;就让我们进入C语言的世界吧 当然&#xff0c;题目还是来源于牛客网 完完全全零基础 编程语言初学训练营_在线编程题…

OP-TEE使用过程记录

1 项目概述 1.1项目需求 为确保用户的数据的安全&#xff0c;ARM公司提出了trustzone技术&#xff0c;个人将trustzone理解为cortex的虚拟化技术。在不增加硬件的情况下&#xff0c;使用trustzone技术达到硬件加密的效果。 1.2重点概念简要介绍 1.2.1 TrustZone机制&#x…