本文适用于西安工业大学物联网工程专业的物联网工程创新综合实践(1)课程的随堂答辩。
结合cat >> /etc/hosts,解释Linux的重定向功能。
这其实是shell的特性,或者说是bash的特性。这个“>>”其实是append(附加)的意思,作用是将cat输出的流(重定向)输入进hosts文件中。
至于Linux本身,它就是个内核而已,向上提供API给C库(glibc,musl libc等)等各种基础设施,C库等再提供API给各应用程序,简单说如下。
以下图片包含NSFW内容。

详细解释SSH的加密机制。
来源:什么是SSH? – 华为

SSH服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和会话ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话ID用于在认证过程中标识该SSH连接。在该阶段也会完成客户端对服务器的身份认证,服务器先使用服务器私钥对消息进行签名,客户端再使用服务器公钥验证签名,从而完成客户端对服务器的身份认证。
由于SSH服务器和客户端需要持有相同的会话密钥用于后续的对称加密,为保证密钥交换的安全性,SSH使用一种安全的方式生成会话密钥,由SSH服务器和客户端共同生成会话密钥,利用数学理论巧妙地实现不直接传递密钥的密钥交换,无需通过不安全通道传送该密钥,具体过程如下图所示。

docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin作用。
先说docker compose和dockerfile。
Docker Compose和Dockerfile的区别是dockerfile只定义了单个容器的构建步骤,而docker-compose则定义了多个容器。
听我bb更多
以XATUSEC所使用的CTF平台(GZ::CTF)为例。
services:
gzctf:
image: registry.cn-shanghai.aliyuncs.com/gztime/gzctf:develop
restart: always
environment:
- "GZCTF_ADMIN_PASSWORD=<Your GZCTF_ADMIN_PASSWORD>"
# choose your backend language `en_US` / `zh_CN` / `ja_JP` ...
- "LC_ALL=zh_CN.UTF-8"
ports:
- "80:8080"
volumes:
- "./data/files:/app/files"
- "./appsettings.json:/app/appsettings.json:ro"
# - "./kube-config.yaml:/app/kube-config.yaml:ro" # this is required for k8s deployment
- "/var/run/docker.sock:/var/run/docker.sock" # this is required for docker deployment
depends_on:
- db
db:
image: postgres:alpine
restart: always
environment:
- "POSTGRES_PASSWORD=<Your POSTGRES_PASSWORD>"
volumes:
- "./data/db:/var/lib/postgresql/data"
它定义了两个容器,一个是web,一个是pgsql。
而这是GZ::CTF的Docker(dockerfile)。你可以明显发现它只定义了这个docker镜像创建的方法。
接下来是docker-ce、docker-ce-cli、containerd.io。
containerd.io,顾名思义,是container daemon的意思,它是用于管理容器的,也是docker的底层管理工具。
docker-ce和docker-ce-cli基本可认定为同一个东西,而且前者是包含后者的。后者是前者的命令行工具。docker-ce是docker的社区版本,而docker则是一个(包含了社区和标准化容器构建的)容器化平台。
举例说明创建容器以及以交互方式访问容器的命令?
默认认为是docker。其实创建和访问容器很简单来着,bootstrap和chroot就可以了,装个linux就是了(不同于Windows,Linux是可以实现安装后免重启配置的,就是配置完后仍然需要重启)。容器的本质就是共用同一套内核的虚拟系统。
docker run -d -p 8000:80 --name container1 nginx # 开一个名叫container1的(从docker hub上拉下来的)nginx容器,并映射内部的80端口到8000;以daemon形式在后台跑
docker exec -it container1 /bin/bash # 在container1容器里跑/bin/bash这个命令(实际上类似chroot/arch-chroot,切换到容器里的root shell)
部署安装K8s为什么要关闭swap分区?
标准答案:防止满内存后(因硬盘IO瓶颈)性能大幅下降。(基于性能考虑)
实际答案:不关的话k8s会拒绝启动(报错不支持swap特性)。
解释kubeadm, kubectl, kubelet的作用。
kubeadm:快速初始化及部署集群工具
kubectl:对集群本身的管理工具
kubelet:对节点(pod)的控制工具
详细说明K8s集群的创建过程。
先建立master,后建立worker后通过token让master拉进集群。
kubeadm config print init-defaults > kubeadm.yaml # 把初始化的yaml文件导出来以备修改
sudo kubeadm init --config kubeadm.yaml # 初始化k8s集群的master节点
sudo kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml # 部署Calico
如上是在master上跑的命令。
kubeadm join 192.168.122.62:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:6e27924f6baf1ad96851393d23e8aa28364a0e19720bc6721483b64d77ce1a22 # 将节点加入master组成集群
如上是在worker上跑的命令。
如下是在master上跑的命令。
kubectl label nodes worker1 worker2 node-role.kubernetes.io/worker= # 给worker节点打标方便管理
kube-apiserver, etcd, kube-controller-manager, kube-scheduler的作用。
kube-apiserver:管理集群的对外接口
etcd:存储pod、node状态的数据库
kube-controller-manager:检查node状态
kube-scheduler:分配pod到node
解释K8s集群的组成结构。参考:链接

如上为简图,如下为详细图片。

其中,kube-proxy是管网络代理的,如果有其它组件可以替代它,可以不用部署。
谈谈你对自动化部署K8s集群优势的看法,是否有不足。
看法:现编,去你妈的。
不足:操作门槛太高,依赖组件过多且出错后难以找到具体问题点,与系统版本紧密绑定。
发表回复