Kubernetes 实战 | 配置日志系统
尽管 Kubernetes Dashboard 允许我们直接进入 Pod 容器中查看日志,但是在实际的系统中,Pod 容器可能经历创建、销毁等过程,一个服务也可能由多个 Pod 负载均衡提供。因此,我们最好配置一套完整的日志收集、分析、搜索、查看系统,方便我们对系统进行监控。 而常用的集群日志系统就是 EFK,即 Elastic Search、Filebeat、Kibana。 EFK 简介Elastic Search 是一款分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例;Filebeat 则是一种 Beats(其他的还有 Metric Beats 等),用...
Kubernetes 实战 | 图解 Kubernetes 资源
Kubernetes 是容器编排工具,负责在多台机器组成的集群上调度容器。用户只需要使用Kubernetes 资源来声明希望集群达到的状态,Kubernetes 就会调度集群资源,自动满足所声明的状态。 使用 Kubernetes,用户不用再操心容器具体的部署过程,而是使用声明式的方法来进行应用部署,大大简化了运维工作,使得程序员可以更专注于业务的的开发。 可以看出,使用 Kubernetes,我们更关心的是集群中的各种资源的管理,下面就是 Kubernetes 中常见的资源。 更值得注意的是,Kubernetes 是通过**控制器(Controller)**来调谐资源的,一个控制器只...
Kubernetes 实战 | 安装 Ingress Controller
可以看到之前安装的 Kubernetes Dashboard Web UI 没有办法直接在集群外部访问,这是由于 Kubernetes 默认 Service 提供的访问方式是 ClusterIP,也就是在集群内部通过虚拟 IP 访问。这个 IP 在集群外是无法访问的。当然,我们可以使用 NodePort 方式来提供 Service 服务,但是这样的话我们就需要在机器上自己设置反向代理,比较麻烦。 什么是 IngressKubernetes 使用 Ingress 的方式解决了这个问题。Ingress 也是集群上的一种资源,用来路由外部的流量到集群内部的 Service。 一个 Ingres...
Kubernetes 实战 | 安装 Dashboard
通过命令行方式管理 Kubernetes 集群不太直观,因此 Kubernetes 官方推出了 Kubernetes Dashboard 这一个 Web UI 工具方便我们执行管理集群相关的操作。 安装 Web UI执行官方提供的一键脚本就可以安装 Kubernetes Dashboard 了: 1kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta1/aio/deploy/recommended.yaml 此时由于 Dashboard 是部署在集群内部的,外部无法直接访问...
ucore OS | 实验 8 文件系统
这次实验课上布置了另外的任务,即实现 MTFQ 以及工作集算法。 在实验过程中,发现 ucore 并没有对用户进程 swap 提供支持,因此加入了一些修正。 练习 1 完成 ucore 文件系统读文件操作的实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849// 处理一开始的块if ((blkoff = offset % SFS_BLKSIZE) != 0 ) { if (nblks != 0) { // 不在一块里 ...
ucore OS | 实验 7 同步互斥
练习 1 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题内核级信号量实现位于 sem.c 中: 12345678910booltry_down(semaphore_t *sem) { bool intr_flag, ret = 0; local_intr_save(intr_flag); if (sem->value > 0) { sem->value --, ret = 1; } local_intr_restore(intr_flag); return ret;} ...
ucore OS | 实验 6 调度器
练习 1 使用 Round-Robin 调度算法123456789101112131415161718192021222324// The introduction of scheduling classes is borrrowed from Linux, and makes the // core scheduler quite extensible. These classes (the scheduler modules) encapsulate // the scheduling policies. struct sched_class { // the nam...
ucore OS | 实验 5 用户进程管理
练习 1 加载应用程序并执行在 load_icode 中,前面的函数体负责初始化内存内容和拷贝相应的内容到内存中,最后需要一种方法,使得 CPU 可以从用户进程入口处开始运行。 123456tf->tf_cs = USER_CS;tf->tf_ds = tf->tf_es = tf->tf_ss = USER_DS;tf->tf_esp = USTACKTOP;tf->tf_eip = elf->e_entry;tf->tf_eflags = FL_IF;ret = 0; 在中断返回之后,CPU 会使用 trapframe 中的值设置寄存...
ucore OS | 实验 4 内核线程管理
练习 1 分配并初始化一个进程控制块12345678910111213141516171819202122232425262728293031323334static struct proc_struct *alloc_proc(void) { struct proc_struct *proc = kmalloc(sizeof(struct proc_struct)); if (proc != NULL) { /* * below fields in proc_struct need to be initialized * enum ...
ucore OS | 实验 3 虚拟内存管理
练习 1 给未被映射的地址映射上物理页12345678910111213141516intdo_pgfault(struct mm_struct *mm, uint32_t error_code, uintptr_t addr) { // ... pte_t *ptep=NULL; if (!(ptep = get_pte(mm->pgdir, addr, 1))) goto failed; //(1) try to find a pte, if pte's PT(Page Table) isn't existe...