1. 系统 uname -a # 查看系统版本全部信息 uname -r # 查看内核版本 hostname # 查看主机名称 cat /etc/redhat-release # 打印系统类型,只对红帽系统有用, 如 CentOS env # 显示环境变量 lspci # 主板信息 2. 资源 free -mh # 查看内存使用量和交换区使用量 df -h # 查看各分区使用情况 du -sh <目录名> # 查看指定目录的大小 uptime # 查看系统运行时间、用户数、负载 cat /proc/loadavg # 查看系统负载 lsblk # 树形显示硬盘结构 nvidia-smi # 显卡信息 cat /proc/cpuinfo | grep 'model name' | sort | uniq # 查看CPU型号 cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l # 查看 CPU 颗数, 实际Server中插槽上的CPU个数, 物理cpu数量 cat /proc/cpuinfo |grep "cores"|uniq|awk '{print $4}' # 查看 CPU 核数, 一颗CPU上面能处理数据的芯片组的数量。 cat /proc/cpuinfo |grep "processor"|wc -l # 逻辑CPU核数,逻辑CPU数量=物理cpu数量 x cpu cores 这个规格值 x 2(如果支持并开启超线程)。 lspci | grep -i nvidia # 查看nvidia显卡,如果没有lspci, yum -y install pciutils lspci | grep -i vga # 查看内置GPU nvidia-smi # 查看GPU watch -n 10 nvidia-smi # 动态查看GPU 3..1. 数据结构与算法 .2. 基本概念与术语 .2.1. 数据 .2.2. 数据元素 .2.3. 数据项 .2.4. 数据对象 .2.5. 总结 .3. 逻辑结构与物理结构 .3.1. 逻辑结构 .3.2. 物理结构 .3.3. 总结 .4. 算法 .4.1. 算法的特征 .4.2. 算法设计的要求 .4.3. 算法时间复杂度 .4.4. 最坏情况与平均情况 .4.5. 空间复杂度 .5. 参考 .6. 关于作者 .1. 数据结构与算法 什么是数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
什么是算法:是解决特定问题求解步骤的描述。
.2. 基本概念与术语 .2.1. 数据 是描述客观事物的符号,是计算机可以操作的对象。
符号必须满足以下两个条件:
可以输入到计算机中。 能被计算机程序处理。 例:整型,字符串等。
.2.2. 数据元素 是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。也称为记录。
例:人,动物,狗,虎等。
.2.3. 数据项 一个数据元素可以由若干个数据项组成。
数据项是数据不可分割的最小单位。
.2.4. 数据对象 是性质相同的数据元素的集合,是数据的子集。
.2.5. 总结 三种之间的关系:数据 > 数据元素 > 数据项优质软件,一枝独秀,供提参考。
开发软件 官网 使用参考 平台 描述 Tabby 介绍 macOS(M1),Linux,Windows SSH客户端 PicGo 文档 macOS(M1),Linux,Windows 图床工具 日常软件 官网 使用参考 平台 描述 Free Download Manager 特色 MacOS(M1),Linux,Windows,Android 下载工具 LANDrop 介绍 IOS,MacOS,Windows,Linux,Android 局域网传输工具 关于作者 我的博客:https://yezihack.github.io
欢迎关注我的微信公众号【空树之空】,共同学习,一起进步~在开发中,代码管理常用 git,做为优秀的分布式代码管理工具,有着优秀的设计, 其中一项就是 .gitignore 的功能。主要用于忽略某此文件或敏感文件,以防 泄漏。
常用的 gitignore tmp .env gohub .DS_Store .history # Golang # ###################### # `go test -c` 生成的二进制文件 *.test # go coverage 工具 *.out *.prof *.cgo1.go *.cgo2.c _cgo_defun.c _cgo_gotypes.go _cgo_export.* # 编译文件 # ################### *.com *.class *.dll *.exe *.o *.so # 压缩包 # ############ # Git 自带压缩,如果这些压缩包里有代码,建议解压后 commit *.7z *.dmg *.gz *.iso *.jar *.rar *.tar *.zip # 日志文件和数据库 # ###################### *.log *.sqlite *.db # 临时文件 # ###################### tmp/ ..1. 前提准备 .2. 安装 Docker 和 Docker-Compose .3. 离线安装之非安全模式 .3.1. 下载安装软件 .3.2. 编辑配置文件 .3.3. 运行安装脚本 .3.4. 查看验证 .3.5. 登陆 Harbor 管理页面 .3.6. Docker 配置 .3.7. Docker 登陆 harbor .3.8. 测试上传镜像 .4. 生成自签名 .4.1. 生成证书颁发机构证书 .4.2. 生成服务器证书 .5. 离线安装之安全模式 .5.1. 下载安装软件 .5.2. 向 Harbor 提供证书 .5.3. 编辑配置文件 .5.4. 运行安装脚本 .5.5. Docker 客户端使用证书 .5.6. Docker 登陆测试 .6. 参考 .7. 关于作者 .1. 前提准备 harbor 2.4.1 版本 基于 CentOS 7 假设我们的 IP 是:192.168.100.8 自定义域名: harbor.Minikube 安装 仅用于开产使用,生产不能使用。 以下仅以 macOS 系统演示
1.1 Docker 安装 官方下载,直接安装即可。
https://docs.docker.com/desktop/mac/install/
使用国内镜像源,推荐阿里云的。
参考:https://yezihack.github.io/posts/docker-install#docker-加速
1.2 Kubectl 安装 Kubernetes 命令行工具,kubectl,使得你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。
官方下载,有详细的安装流程。支持:windows, linux, macOS
参考:https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-macos/
# Apple Silicon M1 cpu curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl" # Intel cpu curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl" 添加权限,加入 PATH 目录
# 添加执行权限 chmod +x ./kubectl # 移动到path目录,全局可访问 sudo mv ./kubectl /usr/local/bin/kubectl sudo chown root: /usr/local/bin/kubectl # 查看版本 kubectl version --client 查看配置,了解更多 kubectl 命令kubernetes 导航目录 第一章 kubernetes 介绍 第二章 Kubernetes 安装 第三章 Kubernetes 资源管理 第四章 Kubernetes 实战操作 第五章 Kubernetes Pod 介绍 第六章 Kubernetes Pod 控制器 第七章 Kubernetes Service 介绍 第八章 Kubernetes Ingress 介绍 第九章 Kubernetes 数据存储 第十章 Kubernetes 权限认证 第十一章 Kubernetes Dashboard 脑图 kubernetes 涉及知识点比较,难以一次全记住,将以上的关于kubernetes 讲解的知识点汇总成脑图,方便查阅,随时复习。
若下图不方便查看,直接查看原链接轻点,脑图
关于作者 我的博客:https://yezihack.github.io
欢迎关注我的微信公众号【空树之空】,共同学习,一起进步~本章节主要介绍 kubernetes 的 Dashboard。
找不到目录, 传送门:Kubernetes 总纲及脑图
下载yaml,并运行Dashboard # 下载yaml [root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml # 修改kubernetes-dashboard的Service类型 kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort # 新增 ports: - port: 443 targetPort: 8443 nodePort: 30009 # 新增 selector: k8s-app: kubernetes-dashboard # 部署 [root@master ~]# kubectl create -f recommended.yaml # 查看namespace下的kubernetes-dashboard下的资源 [root@master ~]# kubectl get pod,svc -n kubernetes-dashboard NAME READY STATUS RESTARTS AGE pod/dashboard-metrics-scraper-c79c65bb7-zwfvw 1/1 Running 0 111s pod/kubernetes-dashboard-56484d4c5-z95z5 1/1 Running 0 111s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/dashboard-metrics-scraper ClusterIP 10.本章节主要介绍Kubernetes的安全认证机制。
找不到目录, 传送门:Kubernetes 总纲及脑图
访问控制概述 Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。
客户端
在Kubernetes集群中,客户端通常有两类:
User Account:一般是独立于kubernetes之外的其他服务管理的用户账号。
Service Account:kubernetes管理的账号,用于为Pod中的服务进程在访问Kubernetes时提供身份标识。
认证、授权与准入控制
ApiServer是访问及管理资源对象的唯一入口。任何一个请求访问ApiServer,都要经过下面三个流程:
Authentication(认证):身份鉴别,只有正确的账号才能够通过认证 Authorization(授权): 判断用户是否有权限对访问的资源执行特定的动作 Admission Control(准入控制):用于补充授权机制以实现更加精细的访问控制功能。 认证管理 Kubernetes集群安全的最关键点在于如何识别并认证客户端身份,它提供了3种客户端身份认证方式:
HTTP Base认证:通过用户名+密码的方式认证
这种认证方式是把“用户名:密码”用BASE64算法进行编码后的字符串放在HTTP请求中的Header Authorization域里发送给服务端。服务端收到后进行解码,获取用户名及密码,然后进行用户身份认证的过程。 HTTP Token认证:通过一个Token来识别合法用户
这种认证方式是用一个很长的难以被模仿的字符串–Token来表明客户身份的一种方式。每个Token对应一个用户名,当客户端发起API调用请求时,需要在HTTP Header里放入Token,API Server接到Token后会跟服务器中保存的token进行比对,然后进行用户身份认证的过程。 HTTPS证书认证:基于CA根证书签名的双向数字证书认证方式
这种认证方式是安全性最高的一种方式,但是同时也是操作起来最麻烦的一种方式。 HTTPS认证大体分为3个过程:
证书申请和下发
HTTPS通信双方的服务器向CA机构申请证书,CA机构下发根证书、服务端证书及私钥给申请者 客户端和服务端的双向认证
1> 客户端向服务器端发起请求,服务端下发自己的证书给客户端, 客户端接收到证书后,通过私钥解密证书,在证书中获得服务端的公钥, 客户端利用服务器端的公钥认证证书中的信息,如果一致,则认可这个服务器 2> 客户端发送自己的证书给服务器端,服务端接收到证书后,通过私钥解密证书, 在证书中获得客户端的公钥,并用该公钥认证证书信息,确认客户端是否合法 服务器端和客户端进行通信
服务器端和客户端协商好加密方案后,客户端会产生一个随机的秘钥并加密,然后发送到服务器端。 服务器端接收这个秘钥后,双方接下来通信的所有内容都通过该随机秘钥加密 注意: Kubernetes允许同时配置多种认证方式,只要其中任意一个方式认证通过即可
授权管理 授权发生在认证成功之后,通过认证就可以知道请求用户是谁, 然后Kubernetes会根据事先定义的授权策略来决定用户是否有权限访问,这个过程就称为授权。
每个发送到ApiServer的请求都带上了用户和资源的信息:比如发送请求的用户、请求的路径、请求的动作等,授权就是根据这些信息和授权策略进行比较,如果符合策略,则认为授权通过,否则会返回错误。
API Server目前支持以下几种授权策略:
AlwaysDeny:表示拒绝所有请求,一般用于测试
AlwaysAllow:允许接收所有请求,相当于集群不需要授权流程(Kubernetes默认的策略)
ABAC:基于属性的访问控制,表示使用用户配置的授权规则对用户请求进行匹配和控制
Webhook:通过调用外部REST服务对用户进行授权
Node:是一种专用模式,用于对kubelet发出的请求进行访问控制
RBAC:基于角色的访问控制(kubeadm安装方式下的默认选项)
RBAC(Role-Based Access Control) 基于角色的访问控制,主要是在描述一件事情:给哪些对象授予了哪些权限
其中涉及到了下面几个概念:
对象:User、Groups、ServiceAccount 角色:代表着一组定义在资源上的可操作动作(权限)的集合 绑定:将定义好的角色跟用户绑定在一起 RBAC引入了4个顶级资源对象:本章节主要介绍kubernetes的数据存储。
在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes引入了Volume的概念。
Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下,kubernetes通过Volume实现同一个Pod中不同容器之间的数据共享以及数据的持久化存储。Volume的生命容器不与Pod中单个容器的生命周期相关,当容器终止或者重启时,Volume中的数据也不会丢失。
kubernetes的Volume支持多种类型,比较常见的有下面几个:
简单存储:EmptyDir、HostPath、NFS 高级存储:PV、PVC 配置存储:ConfigMap、Secret 基本存储 EmptyDir EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录。
EmptyDir是在Pod被分配到Node时创建的,它的初始内容为空,并且无须指定宿主机上对应的目录文件,因为kubernetes会自动分配一个目录,当Pod销毁时, EmptyDir中的数据也会被永久删除。 EmptyDir用途如下:
临时空间,例如用于某些应用程序运行时所需的临时目录,且无须永久保留
一个容器需要从另一个容器中获取数据的目录(多容器共享目录)
接下来,通过一个容器之间文件共享的案例来使用一下EmptyDir。
在一个Pod中准备两个容器nginx和busybox,然后声明一个Volume分别挂在到两个容器的目录中,然后nginx容器负责向Volume中写日志,busybox中通过命令将日志内容读到控制台。
创建一个volume-emptydir.yaml
apiVersion: v1 kind: Pod metadata: name: volume-emptydir namespace: dev spec: containers: - name: nginx image: nginx:1.14-alpine ports: - containerPort: 80 volumeMounts: # 将logs-volume挂在到nginx容器中,对应的目录为 /var/log/nginx - name: logs-volume mountPath: /var/log/nginx - name: busybox image: busybox:1.30 command: ["/bin/sh","-c","tail -f /logs/access.log"] # 初始命令,动态读取指定文件中内容 volumeMounts: # 将logs-volume 挂在到busybox容器中,对应的目录为 /logs - name: logs-volume mountPath: /logs volumes: # 声明volume, name为logs-volume,类型为emptyDir - name: logs-volume emptyDir: {} # 创建Pod [root@master ~]# kubectl create -f volume-emptydir.