一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。
日常
1、起床6:00
2、健身2h
3、LeetCode刷了题
- 动态规划概念
- 如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,有重叠子问题时使用动态规划DP,不可以用贪心,贪心是局部最优
- 当有很多重叠子问题时,用动态规划最有效,从上一个状态推出当前状态,而贪心是局部最优解,无法解决动态规划问题
- 动规是由前一个状态推导出来的,而贪心是局部直接选最优的
- 对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!
- 确定dp数组以及下标的含义:一定要牢记dp数组下标的含义
- 确定递推公式
- dp数组如何初始化:一些情况是递推公式决定了dp数组要如何初始化!
- 确定遍历顺序:从递推公式确认遍历顺序
- 举例推导dp数组
- 找问题的最好方式就是把dp数组打印出来,看看究竟是不是按照自己思路推导的!
- 动态规划对于重叠子问题非常有效,根据之前的状态来推导当前的状态,贪心是局部最优解,不适用于动态规划;动态规划先定义dp数组,并确定每个下标的含义,然后确认递推公式,再初始化dp数组,确认遍历顺序,最后举例验证;如果出现错误则打印dp数组看是否符合预期
- 斐波那契数列
- 爬楼梯
- dp0应该 == 0,不应该定义为1,因为n为正整数,故n不可能为0
- 加大难度,最多可以m个阶梯到达
- 使用最小花费爬楼梯
- 此时从0和1开始,刚开始的花费是0的,每次根据前面的花费+对应向上走的花费来更新dp数组
4、复盘22:00
不复盘等于白学!!!
学习和感想
1. Kubernetes
1. 是什么:分布式系统管理框架
- 当容器太多时,急需一个大规模容器编排系统,对所有的容器进行管理,K8s就是对一整个分布式系统的所有容器进行管理,对整个分布式系统的所有容器进行管理
- 服务发现和负载均衡:对所有的容器进行统一编排和处理,Kubernetes可以对所有的容器服务进行注册发现,其会对某个服务的请求进行负载均衡
- 存储编排:对所有的容器服务的存储进行统一管理
- 自动部署和回滚:将部分的容器服务直接回滚到之前的版本
- 自动完成装箱计算:Kubernetes允许指定每个容器所需的CPU和内存
- 自我修复:Kubernetes会对重启失败、停止允许的容器进行自我修复,自动恢复到结束之前的配置
- Kubernetes的特性
2. 架构
-
Kubernetes一般都是集群模式,多个master节点和多个WorkNode节点
-
Kubernetes Cluster = Nmaster + Nworknode,即N个master结点和N个工作节点
-
集群中每个组件都是通过 api-server 进行通信,每个结点都必须有一个 kubelet 进行结点的控制,每个结点通过 kube-proxy 进行通信,由kubelet对该节点进行配置,由kubeadm在主节点中对主节点进行配置,kubectl是命令行工具,对服务器中的kubenetes进行配置
3. Kubernetes创建集群
- 为每台机器安装Docker
- 为每个机器安装 Kubelet、Kubectl(K8S的命令行)、Kubeadm(快速搭建K8S集群),三大件不需要Docker,其他组件均需要Docker
- 选择一台机器在Kubadm中输入 kubadm init 来初始化为master节点
- 由master节点的kubelet自动去下载安装master核心组件 scheduler、kube-proxy、etcd、api-server、controller-manager
- 对于非master节点通过在kubadm中输入 kubadm join 来加入master节点,此时就变为WorkNode,然后由该节点的kubelet去安装kube-proxy
4. 创建三台云服务器
- 创建三台云服务器实例
- 为每个服务器配置公网IP,且设置一个VPC私有网络,使得所有的服务器都放到一个VPC下,此时可以通过私网IP进行访问,速度快且不收费,只有同一个VPC私有网络下的服务器才可以通过私网IP进行互相访问,此时很快且不收费
- 只有同一个VPC下的机器才可以通过私网IP进行访问
- 且要在创建服务器时指定VPC
- 为每个服务器中都安装Docker环境,且要安装与K8s的环境相匹配的版本
- 使用 systemctl enable docker --now 来启动Docker,此时enable是指开机启动,–now指当前启动
5. Kubernetes创建集群
-
准备预备环境,更改配置
-
安装集群三大件:kubelet、kubeadm、kubectl
- kubelet、、kubeadm、kubectl
-
使用kubeadm引导安装master节点
-
除了Kubenetes三大件,其余的组件都以容器的形式进行运行,要下载镜像然后运行
-
下载好组件的镜像后要先初始化主节点master,使用kubeadm init来初始化,只在主节点中进行初始化,但要先在所有节点中指出当前的主节点,然后只在主节点中初始化,此时kubeadm会自动对master节点进行配置
-
根据master节点的提示继续后面的操作,进行配置后,然后加入新的master节点,加入新的WorkNode节点(24小时内有效,超时可以申请令牌)
-
当使用kubectl get pods -A 查看部署的所有pos时出现了核心组件,则说明主master节点安装完成
-
-
向集群中加入WorkNode
-
根据创建master节点完成后返回的操作提示来join工作节点WorkNode,该提示中的命令是24小时之内有效的,如果超过24小时就不可以使用该命令加入新的节点了
-
通过在master节点中 kubeadm token create --print-join-command 来获取新的加入WorkNode节点的令牌
-
然后在master节点中使用kubectl get nodes来查看集群中的所有节点,必须在master节点才可以查看
-
必须等所有pod都安装成功并Running后才可以看到nodes,可以使用 watch -n 1 kubectl get pod -A:来每s监控一次是否部署成功
-
-
Kubenetes集群自我修复能力测试
- 当集群宕机后重启,会自动恢复之前的配置
-
Kubenetes命令
- kubectl get nodes:查看集群所有节点
- kubectl apply -f xxx.yaml:根据配置文件,给集群创建资源
- kubectl get pods -A:查看集群部署了哪些应用(在Docker里面通过docker ps 查看所有正在运行的容器,在Kubunetes中叫 pod)