学习目的:通过21天的课程学习,了解docker和k8s的常用知识,达到扫盲的目的

课程来源:21天转型容器实战营 by华为云团队

Day1 容器入门之了解容器的基础知识

虚拟机VS容器

Docker是CS架构

docker 的模块
image.png

docker常见的架构
image.png

Day2 容器入门之手把手教您制作镜像

什么是分层镜像

image.png

有点:
资源的共享

基础镜像被改变了,已经运行的容器是否会改变? 结论:不会改变。

操作(基于镜像构建镜像)

  1. docker pull 镜像名
  2. 运行镜像 docker run -it 镜像名 sh
  3. 修改运行的容器文件并创建新的镜像 docker commit 容器id 新的镜像名
  4. 查看镜像分层 docker history 镜像id

题外话:

  1. 创建一个100M的空文件 dd if=/dev/zero of=hello.txt bs=100M count=1

参考链接

  1. 退出容器快捷键 ctrl + p && ctrl + q 保证退出容器后,容器依然运行

什么是Dockerfile

image.png
FROM 一个基础镜像;每一个RUN会新增一个镜像层

image.png

使用Dockerfile构建镜像

image.png

使用容器镜像服务在线构建镜像

image.png

Day3 容器入门之手把手教您运行一个容器

什么是容器

image.png
image.png

参数介绍

image.png

启动容器

端口映射docker run -d --name tank -p 80:80 ${image}
文件挂载
docker cp tank:/etc/nginx/conf.d/default.conf ./

docker run -d --name tank1 -p 8081:8080 -v $PWD/default.conf:/etc/nginx/conf.d/default.conf ${image}

Day4 容器进阶之kubernetes之基础知识介绍

CKA 认证介绍

报名链接:https://www.cncf.io/certification/cka/

考纲解读

考纲 :https://github.com/cncf/curriculum

k8s架构和工作原理

架构
master - slave

原理
list- watch
image.png

理解k8s API原语

image.png

image.png

  1. template 是对pod的定义
  2. selector>matchLabels 需要和 template中的labels一致,才能查询到该pod

记忆API需要先找到一般规律,特殊的记忆通过实践强化记忆

使用kubectl

image.png
image.png

image.png
image.png

image.png

创建一个 deployment

kubectl run edgar --image=edgar --port=80
kubectl run deployment名字 镜像地址 访问端口

弹性伸缩

kubectl scale deployment nginx --replicas=2

课后作业

image.png

  1. 使用create创建Pod时报错invalid object doesn’t have additional properties

解决方式:https://stackoverflow.com/questions/55417410/kubernetes-create-deployment-unexpected-schemaerror
课后题一:
第一小问
使用 create 的方式创建pod。准备的文件pod.yaml 如下:

  1. 1
  2. 2 {
  3. 3 "kind": "Pod",
  4. 4 "apiVersion": "v1",
  5. 5 "metadata": {
  6. 6 "name": "pod-name-cka-04",
  7. 7 "labels": {
  8. 8 "name": "label-day-04"
  9. 9 }
  10. 10 },
  11. 11 "spec": {
  12. 12 "containers": [
  13. 13 {
  14. 14 "name": "cka-day4",
  15. 15 "image": "nginx",
  16. 16 "ports": [
  17. 17 {
  18. 18 "containerPort": 6379
  19. 19 }
  20. 20 ]
  21. 21 }
  22. 22 ]
  23. 23 }
  24. 24 }

kubectl create -f pod.yaml // 返回pod name 表示创建pod成功
image.png

第二小问:
获取pod-name-cka-04的yaml
kubectl get pod/pod-name-cka-04 -o yaml > complete-pod.yaml
complete-pod.yaml

初始化yaml
kubectl run --image=nginx init-yaml-name -o yaml --dry-run >> init.yaml
init.yaml

  1 apiVersion: apps/v1
  2 kind: Deployment
  3 metadata:
  4   creationTimestamp: null
  5   labels:
  6     run: init-yaml-name
  7   name: init-yaml-name
  8 spec:
  9   replicas: 1
 10   selector:
 11     matchLabels:
 12       run: init-yaml-name
 13   strategy: {}
 14   template:
 15     metadata:
 16       creationTimestamp: null
 17       labels:
 18         run: init-yaml-name
 19     spec:
 20       containers:
 21       - image: nginx
 22         name: init-yaml-name
 23         resources: {}
 24 status: {}

课后题二:

其他知识点:

  1. 登录docker共享仓库https://hub.docker.com 时不需要加访问地址server

docker login [options] [server]
options:
-p password
-u username

Day5 容器进阶之Kubernetes pod调度原理分析

image.png

调度相关概念

scheduling: 为Pod找到一个合适的Node
调度的结果:找到合适的Node,节点的组件kubelet将Pod运行起来
image.png

image.png
image.png

高级调度和用法

image.png
image.png
image.png
image.png

手动调度和daemonSet

image.png
image.png

image.png
image.png

调度失败原因分析

image.png

多调度器

image.png

Day7 容器进阶之Kubernetes 应用生命周期原理分析

Day9 容器进阶之Kubernetes 网络管理原理分析

Day11 容器进阶之Kubernetes 存储管理原理分析

Day13 容器进阶之Kubernetes 安全原理分析

Day15 容器进阶之lstio服务与架构

Day16 容器进阶之lstio灰度发布任务的介绍与实践

Day17 容器进阶之lstio流量治理与全景监控实践

Day18 容器应用之ContainerOps介绍

Day19 容器应用之基于containerops进行容器化交付

Day20+Day21 容器应用之AOS介绍 + 基于AOS进行全自动云上编排