k8s学习路线

part1 云原生

part2 容器化

说明:

1. FROM 行表示以下的构建步骤基于什么镜像进行构建,正如前面所提到的,镜像是可以复用的;
2. WORKDIR 行表示会把接下来的构建步骤都在哪一个相应的具体目录下进行,其起到的作用类似于 Shell 里面的 cd; (进入一个目录)
3. COPY 行表示的是可以将宿主机上的文件拷贝到容器镜像内;
4. RUN 行表示在具体的文件系统内执行相应的动作。当我们运行完毕之后就可以得到一个应了;
5. CMD 行表示使用镜像时的默认程序名字。(默认的运行应用名称)


    数据卷管理主要有两种方式:

  • 第一种是通过 bind 的方式,直接将宿主机的目录直接挂载到容器内;这种方式比较简单,但是会带来运维成本,因为其依赖于宿主机的目录,需要对于所有的宿主机进行统一管理。

  • 第二种是将目录管理交给运行引擎。

part3 k8s

学习 Kubernetes 需要掌握一系列基础概念和技术。以下是一份学习 Kubernetes 的主要内容:

1. 基础概念和术语:
Pods(Pod): Kubernetes 最小的可部署单元,可以包含一个或多个容器。
Service: 提供对一组 Pod 的访问、负载均衡和服务发现。
Deployment: 用于定义和管理 Pod 的部署,支持滚动更新。
ConfigMaps 和 Secrets: 用于管理应用程序的配置和敏感信息。
Namespace: 用于在集群中创建虚拟的资源分区。
Node 和 Cluster: Node 是集群中的工作节点,Cluster 是由一组 Node 组成的整体。

2. Kubernetes 架构和组件:
Master 和 Node: Kubernetes 集群的两个核心组件,Master 负责集群的控制和管理,Node 执行容器工作负载。
etcd: 分布式键值存储,用于保存集群状态。
kubelet 和 kube-proxy: Node 上的代理程序,负责维护容器的运行状态和网络代理。
API Server: 提供 Kubernetes 控制面板的 API 入口。
Controller Manager 和 Scheduler: 控制器负责监控集群状态和进行调整,调度器负责将 Pod 分配到 Node 上。

3. Pod 和容器:
Docker 或其他容器运行时: 了解容器技术,学习如何构建、推送和运行容器。
Pod 的生命周期: 了解 Pod 的创建、调度、运行和销毁过程。

4. Kubectl 工具:
kubectl: Kubernetes 命令行工具,用于与集群进行交互。
kubectl 的基本命令: 学习使用 kubectl 进行 Pod、Service、Deployment 等资源的管理和查询。

5. Pod 网络和服务发现:
Service 和 Ingress: 学习如何创建 Service 和使用 Ingress 控制对应用程序的访问。
Flannel、Calico 或其他网络插件: 了解 Pod 之间的网络通信和服务发现机制。

6. 存储:
Volume: 学习如何在 Pod 中使用 Volume 进行数据持久化。
Persistent Volumes 和 Persistent Volume Claims: 理解如何管理持久化存储。

7. 配置管理:
ConfigMaps 和 Secrets: 了解如何使用 ConfigMaps 和 Secrets 管理应用程序配置和敏感信息。

8. 安全:
RBAC(Role-Based Access Control): 学习如何使用 RBAC 控制用户对集群的访问权限。
Network Policies: 了解如何定义和实施网络策略,控制 Pod 之间的通信。

9. 监控和日志:
Prometheus 或其他监控工具: 学习如何监控集群中的资源利用率和应用程序性能。
EFK Stack(Elasticsearch、Fluentd、Kibana): 了解如何收集和分析日志。

10. 扩展和自动化:
Horizontal Pod Autoscaler(HPA): 学习如何根据负载自动调整 Pod 的数量。
Operator 模式: 了解如何使用 Operator 实现自定义控制器。

11. 实际应用和部署:
实践项目: 尝试在本地或云上搭建一个简单的 Kubernetes 集群,部署和管理一个简单的应用程序。

12. 进阶主题:
Service Mesh(例如 Istio): 了解如何使用服务网格管理微服务之间的通信。
Kustomize: 学习如何使用 Kustomize 进行 Kubernetes 资源的声明式管理。

13. 持续集成和持续部署:
Jenkins、GitLab CI 等工具: 学习如何使用 CI/CD 工具将应用程序部署到 Kubernetes 集群。

14. 社区和文档:
Kubernetes 官方文档: 详细阅读 Kubernetes 官方文档,了解最新的更新和最佳实践。
参与社区: 加入 Kubernetes 社区,参与讨论、贡献和学习。


以上是一个涵盖 Kubernetes 学习的基础和进阶主题的列表。建议在学习过程中结合实际应用场景,通过动手操作和构建项目来加深理解。同时,随着 Kubernetes 技术的不断演进,持续关注社区的更新和最佳实践。
 

part4 k8s命令指南

Kubectl 自动补全

# setup autocomplete in bash, bash-completion package should be installed first.
$ source <(kubectl completion bash) 
 # setup autocomplete in zsh
$ source <(kubectl completion zsh)

Kubectl 上下文和配置

设置 kubectl 命令交互的 kubernetes 集群并修改配置信息。参阅 使用 kubeconfig 文件进行跨集群验证 获取关于配置文件的详细信息。

# 显示合并后的 kubeconfig 配置
$ kubectl config view 
# 同时使用多个 kubeconfig 文件并查看合并后的配置
$ KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view
# 获取 e2e 用户的密码
$ kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
# 显示当前的上下文
$ kubectl config current-context    
# 设置默认上下文为 my-cluster-name
$ kubectl config use-context my-cluster-name  
# 向 kubeconf 中增加支持基本认证的新集群
$ kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword
# 使用指定的用户名和 namespace 设置上下文
$ kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce
1、创建对象
Kubernetes 的清单文件可以使用 json 或 yaml 格式定义。可以以 .yaml、.yml、或者 .json 为扩展名。

# 创建资源
$ kubectl create -f ./my-manifest.yaml     
# 使用多个文件创建资源
$ kubectl create -f ./my1.yaml -f ./my2.yaml   
# 使用目录下的所有清单文件来创建资源
$ kubectl create -f ./dir    
# 使用 url 来创建资源
$ kubectl create -f https://git.io/vPieo  
# 启动一个 nginx 实例
$ kubectl run nginx --image=nginx  
 # 获取 pod 和 svc 的文档
$ kubectl explain pods,svc                      
# 从 stdin 输入中创建多个 YAML 对象
$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - sleep
    - "1000000"
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep-less
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - sleep
    - "1000"
EOF
# 创建包含几个 key 的 Secret
$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: $(echo "s33msi4" | base64)
  username: $(echo "jane" | base64)
EOF





  1. 查看 Pod,现在没有任何的一个 Pod;

  • kubectl get pods

  1. 然后用事先准备好的一个 Pod 的 yaml,创建一个 Pod 出来;

  • kubectl apply -f pod1.yaml

  • kubectl apply -f pod2.yaml

  1. 现在查看一下 Pod 打的标签,我们用 --show-labels 这个选项,可以看到这两个 Pod 都打上了一个部署环境和层级的标签;

  • kubectl get pods —show-labels

  1. 我们也可以通过另外一种方式来查看具体的资源信息。首先查看 nginx1 第一个 Pod 的一个信息,用 -o yaml 的方式输出,可以看到这个 Pod 元数据里面包括了一个 lables 的字段,里面有两个 lable;

  • kubectl get pods nginx1 -o yaml | less

  1. 现在再想一下,怎么样对 Pod 已有的 lable 进行修改?我们先把它的部署环境,从开发环境改成测试环境,然后指定 Pod 名字,在环境再加上它的一个值 test ,看一下能不能成功。 这里报了一个错误,可以看到,它其实是说现在这个 label 已经有值了;

  • kubectl label pods nginx1 env=test

  1. 如果想覆盖掉它的话,得额外再加上一个覆盖的选项。加上之后呢,我们应该可以看到这个打标已经成功了;

  • kubectl label pods nginx1 env=test —overwrite

  1. 我们再看一下现在集群的 lable 设置情况,首先可以看到 nginx1 的确已经加上了一个部署环境 test 标签;

  • kubectl get pods —show-labels

  1. 如果想要对 Pod 去掉一个标签,也是跟打标签一样的操作,但是 env 后就不是等号了。只加上 label 名字,后面不加等号,改成用减号表示去除 label 的 k:v;

  • kubectl label pods nginx tie-

  1. 可以看到这个 label,去标已经完全成功;

  • kubectl get pods —show-labels

  1. 下面来看一下配置的 label 值,的确能看到 nginx1 的这个 Pod 少了一个 tie=front 的标签。有了这个 Pod 标签之后,可以看一下怎样用 label Selector 进行匹配?首先 label Selector 是通过 -l 这个选项来进行指定的 ,指定的时候,先试一下用相等型的一个 label 来筛选,所以我们指定的是部署环境等于测试的一个 Pod,我们可以看到能够筛选出一台;

  • kubectl get pods —show-labels -l env=test

  1. 假如说有多个相等的条件需要指定的,实际上这是一个与的关系,假如说 env 再等于 dev,我们实际上是一个 Pod 都拿不到的;

  • kubectl get pods —show-labels -l env=test,env=dev

  1. 然后假如说 env=dev,但是 tie=front,我们能够匹配到第二个 Pod,也就是 nginx2;

  • kubectl get pods —show-labels -l env=dev,tie=front

  1. 我们还可以再试一下怎么样用集合型的 label Selector 来进行筛选。这一次我们还是想要匹配出所有部署环境是 test 或者是 dev 的一个 Pod,所以在这里加上一个引号,然后在括号里面指定所有部署环境的一个集合。这次能把两个创建的 Pod 都筛选出来;

  • kubectl get pods —show-labels -l ’env in (dev,test)’

  1. 我们再试一下怎样对 Pod 增加一个注解,注解的话,跟打标是一样的操作,但是把 label 命令改成 annotate 命令;然后,一样指定类型和对应的名字。后面就不是加上 label 的 k:v 了,而是加上 annotation 的 k:v。这里我们可以指定一个任意的字符串,比如说加上空格、加上逗号都可以;

  • kubectl annotate pods nginx1 my-annotate=‘my annotate,ok’

  1. 然后,我们再看一下这个 Pod 的一些元数据,我们这边能够看到这个 Pod 的元数据里面 annotations,这是有一个 my-annotate 这个 Annotations;

  • kubectl get pods nging1 -o yaml | less

  1. 然后我们再演示一下看 Pod 的 OwnerReference 是怎么出来的。原来的 Pod 都是直接通过创建 Pod 这个资源方式来创建的,这次换一种方式来创建:通过创建一个 ReplicaSet 对象来创建 Pod 。首先创建一个 ReplicaSet 对象,这个 ReplicaSet 对象可以具体查看一下;

  • kubectl apply -f rs.yaml

  • kubectl get replicasets nginx-replicasets -o yaml |less

  1. 会发现多了两个 Pod,仔细查看这两个 Pod,可以看到 ReplicaSet 创建出来的 Pod 有一个特点,即它会带有 OwnerReference,然后 OwnerReference 里面指向了是一个 replicasets 类型,名字就叫做 nginx-replicasets

  • kubectl get pods nginx-replicasets-rhd68 -o yaml | less

常用devevops工具链:

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K8s (Kubernetes)是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。学习K8s时,可以使用思维导图来帮助理清各个概念和组件之间的关系。 首先,思维导图将K8s的核心概念列出,比如Pod、ReplicaSet、Deployment、Service等。Pod是最小的可部署单元,它可以包含一个或多个容器。ReplicaSet用于管理Pod的复制和扩展,确保应用程序的高可用性。Deployment提供了对应用程序的声明性定义,简化了应用的部署和更新过程。Service充当了一个内部或外部访问Pod的入口。 其次,思维导图可以展示K8s的主要组件和它们之间的关系。K8s集群由Master和Worker节点组成。Master节点负责整个集群的调度和控制,包括API服务器、控制器管理器、调度器和etcd存储。Worker节点托管容器,并通过kubelet将节点注册到Master上。另外还有网络插件、存储插件和DNS插件等组件,帮助容器进行网络通信、存储管理和域名解析。 最后,思维导图可以概述K8s的常见操作和工具。学习者可以了解如何创建和管理Pod、如何通过Deployment进行应用程序的滚动更新,以及如何使用Service实现服务发现和负载均衡。此外,还可以介绍一些常用的K8s工具,比如kubectl用于与K8s集群进行交互,helm用于简化应用程序的打包和部署,以及Prometheus用于监控和告警。 总体来说,通过思维导图的方式学习K8s,可以清晰地了解K8s的核心概念、组件关系以及常用操作和工具,帮助学习者更深入地理解和应用K8s技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值