Docker 🐋 和 Kubernetes 的初学者到专家指南 ☸️ | 系列

简介: 欢迎来到关于Docker 🐋 & Kubernetes ☸️的新博客系列,我将根据我 2 年开发容器化应用程序的经验,揭开容器化的神秘力量。我相信,在本系列结束时,您将能够轻松容器化和部署您的项目。现在,让我们快速向您概述我将教您的内容。

欢迎来到关于Docker 🐋 & Kubernetes ☸️的新博客系列,我将根据我 2 年开发容器化应用程序的经验,揭开容器化的神秘力量。

我相信,在本系列结束时,您将能够轻松容器化和部署您的项目。

现在,让我们快速向您概述我将教您的内容。

table-of-blogs博客表✍️

docker-diveDocker 🐋 潜水:

  • 容器背后的动机
  • Docker 的演变
  • 解读 Docker 术语
  • 设置 Docker 和 Hello World
  • 浏览第 3 方容器
  • 使用 Docker 创建演示
  • 构建 Docker 镜像 101
  • 了解容器注册表
  • 运行和管理容器
  • 容器安全要点
  • 与 Docker 对象交互
  • 优化开发工作流程
  • 代码到云:部署容器

kubernetes-journeyKubernetes ☸️ 之旅:

  • Kubernetes 要点
  • 构建本地 Kubernetes 集群
  • 创建和扩展部署
  • 使用 YAML 进行服务和部署
  • 连接部署
  • 切换运行时:Docker 到 CRI-O

介绍

管理 Kubernetes 集群和执行管理任务可能非常复杂且耗时。但是,使用正确的 kubectl 别名集,您可以简化 Kubernetes 管理并提高任务效率。在本文中,我们将探索一系列有用的 kubectl 别名,它们可以帮助您更快、更轻松地执行常见任务。从检索资源信息到对 Pod 进行故障排除和管理节点,这些别名将成为 Kubernetes 工具包中的宝贵工具。因此,让我们深入研究并发现简化 Kubernetes 管理所需的 kubectl 别名!

prerequisites先决条件

在开始使用这些有用的 kubectl 别名之前,请确保您的工作站满足以下先决条件:

the-alias-list别名列表

以下是您可以添加到 shell 配置中的有用 kubectl 别名的列表:

# autocomplete kubectl & helm
source <(kubectl completion zsh)
source <(helm completion zsh)
alias k=kubectl
# when using below aliases, print kubectl command and then execute it
function kctl() { echo "+ kubectl $@" && command kubectl $@ }
# add aliases collection like 'kgpo' for 'kubectl get pods` from https://github.com/ahmetb/kubectl-aliases
[ ! -f ~/.kube/aliases.sh ] && curl -fsSL "https://raw.githubusercontent.com/ahmetb/kubectl-aliases/master/.kubectl_aliases" > ~/.kube/aliases.sh && sed -i -e 's/kubectl/kctl/g' ~/.kube/aliases.sh
source ~/.kube/aliases.sh
# set default namespace
alias kn='kctl config set-context --current --namespace'
# get events sorted by last timestamp
alias kgel='kctl get events --sort-by=.lastTimestamp'
# get events sorted by creation timestamp
alias kgec='kctl get events --sort-by=.metadata.creationTimestamp'
# get pod's descending events
function kger() { kctl get events --sort-by=.lastTimestamp --field-selector involvedObject.name="$@" }
# get 'real' all
alias kgworld='kctl get $(kubectl api-resources --verbs=list --namespaced -o name | paste -sd ",")'
# display all nodes resources request and limits
alias kgnr="k get nodes --no-headers | awk '{print \$1}' | xargs -I {} sh -c 'echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo '"
# start a debug pod (including lots of troubleshooting tools)
alias kdebug="kctl -n default run debug-$USER --rm -it --tty --image leodotcloud/swiss-army-knife:v0.12 --image-pull-policy=IfNotPresent -- bash"
# get pod's containers list
function kgpc() { kctl get pod -o jsonpath="{.spec.containers[*].name}" "$@" && echo "" }
# ping a service, ex: 'kping whoami:8080'
alias kping='kctl run httping -it --image bretfisher/httping --image-pull-policy=IfNotPresent --rm=true --'
# get existing pod's yaml without forbidden fields, ex: 'kyaml pod whoami'
function kyaml() { kubectl get "$@" -o yaml | kubectl-neat }
# display and delete failed pods in current namespace
alias krmfailed='kctl delete pods --field-selector=status.phase=Failed'

用例解释

让我们深入研究这些别名的一些用例和解释。

1-write-basic-commands-faster1.更快地编写基本命令

kubectl-aliases Github 存储库包含一个生成数百个基本别名的脚本,这些别名包含在上面的列表中。

生成的 800 个别名中的一些是:

alias k='kubectl'
alias kg='kubectl get'
alias kgpo='kubectl get pod'
alias ksysgpo='kubectl --namespace=kube-system get pod'
alias krm='kubectl delete'
alias krmf='kubectl delete -f'
alias krming='kubectl delete ingress'
alias krmingl='kubectl delete ingress -l'
alias krmingall='kubectl delete ingress --all-namespaces'
alias kgsvcoyaml='kubectl get service -o=yaml'
alias kgsvcwn='kubectl get service --watch --namespace'
alias kgsvcslwn='kubectl get service --show-labels --watch --namespace'
alias kgwf='kubectl get --watch -f'
...

然而,回忆命令的用途可能具有挑战性:

$> kgcmslwn main
# NAME                   DATA   AGE    LABELS
# kube-root-ca.crt       1      144d   <none>
# logstash-config        1      100d   app=logstash,chart=logstash,heritage=Helm,release=ls
# logstash-pipeline      1      100d   app=logstash,chart=logstash,heritage=Helm,release=ls
# ls-finance-config      1      61d    app=ls-finance,chart=logstash,heritage=Helm,release=ls-finance
# ls-finance-pipeline    1      61d    app=ls-finance,chart=logstash,heritage=Helm,release=ls-finance

为了解决这个问题,我们添加了一个在执行命令之前显示完整命令的功能。这提供了清晰度并帮助您理解该命令的作用:

$> kgcmslwn main
+ kubectl get configmap --show-labels --watch --namespace main
# NAME                   DATA   AGE    LABELS
# kube-root-ca.crt       1      144d   <none>
# logstash-config        1      100d   app=logstash,chart=logstash,heritage=Helm,release=ls
# logstash-pipeline      1      100d   app=logstash,chart=logstash,heritage=Helm,release=ls
# ls-finance-config      1      61d    app=ls-finance,chart=logstash,heritage=Helm,release=ls-finance
# ls-finance-pipeline    1      61d    app=ls-finance,chart=logstash,herit

2. 获取排序和过滤的事件

对 Kubernetes 集群中的事件进行排序可能具有挑战性。我们添加了别名来按上次查看日期和创建时间戳对事件进行排序。

$> kgel -A
+ kubectl get events --sort-by=.lastTimestamp -A
# NAMESPACE            LAST SEEN   TYPE      REASON                 OBJECT                                            MESSAGE
# illu-for-designers   22m         Warning   Unhealthy              pod/auth-server-67c944c549-7qmmj                  Startup probe failed: Get "http://10.0.8.148:8080/auth-server/actuator/health/liveness": dial tcp 10.0.8.148:8080: connect: connection refused
# fix-analytics-env    3m23s       Warning   BackOff                pod/marketplace-test-6b9955d469-9zq2n             Back-off restarting failed container
# elk                  2m44s       Normal    WaitForFirstConsumer   persistentvolumeclaim/ls-logstash-ls-logstash-0   waiting for first consumer to be created before binding
# illu-for-designers   2m4s        Warning   BackOff                pod/backoffice-5c88b6d84-mv88z                    Back-off restarting failed container
$> kgec -A
+ kubectl get events --sort-by=.metadata.creationTimestamp -A
# NAMESPACE            LAST SEEN   TYPE      REASON                 OBJECT                                            MESSAGE
# elk                  4m4s        Normal    WaitForFirstConsumer   persistentvolumeclaim/ls-logstash-ls-logstash-0   waiting for first consumer to be created before binding
# fix-analytics-env    4m43s       Warning   BackOff                pod/marketplace-test-6b9955d469-9zq2n             Back-off restarting failed container
# illu-for-designers   3m20s       Warning   BackOff                pod/bff-66b6b7bc4b-l8s82                          Back-off restarting failed container
# illu-for-designers   23m         Warning   Unhealthy              pod/auth-server-67c944c549-7qmmj                  Startup probe failed: Get "http://10.0.8.148:8080/auth-server/actuator/health/liveness": dial tcp 10.0.8.148:8080: connect: connection refused

此外,您可以使用别名过滤特定资源的事件kger

$> kger auth-server-67c944c549-7qmmj
+ kubectl get events --sort-by=.lastTimestamp --field-selector involvedObject.name=auth-server-67c944c549-7qmmj
# LAST SEEN   TYPE      REASON      OBJECT                             MESSAGE
# 26m         Warning   Unhealthy   pod/auth-server-67c944c549-7qmmj   Startup probe failed: Get "http://10.0.8.148:8080/auth-server/actuator/health/liveness": dial tcp 10.0.8.148:8080: connect: connection refused
# 99s         Warning   BackOff     pod/auth-server-67c944c549-7qmmj   Back-off restarting failed container

3-display-every-resources-really3.显示所有资源(真的)

kubectl get all命令实际上并不显示所有资源。为了克服这个限制,我们创建了kgworld别名。此别名使用 检索所有资源kubectl get $(kubectl api-resources --verbs=list --namespaced -o name | paste -sd ",")

4-display-nodes-resources-requests-and-limits4. 显示节点资源请求和限制

要查看集群中节点的资源请求和限制,您可以使用别名kgnr此别名提供了每个节点的 CPU 和内存分配的清晰概述。

$> kgnr
# ip-10-0-17-119.eu-west-1.compute.internal
#   Resource                    Requests       Limits
#   cpu                         935m (23%)     6300m (160%)
#   memory                      11952Mi (80%)  10948Mi (73%)
# ip-10-0-31-235.eu-west-1.compute.internal
#   Resource                    Requests       Limits
#   cpu                         1415m (36%)    8900m (227%)
#   memory                      14259Mi (96%)  15326Mi (103%)



5.启动瑞士军刀调试pod

当 Pod 缺乏必要的故障排除工具时,调试 Pod 可能会很困难。

别名kdebug通过启动一个预装所有基本工具的调试 Pod 来解决这个问题:arping、arptables、bridge-utils、ca-certificates、conntrack、curl、docker、dnsutils、ethtool、iperf、iperf3、iproute2、ipsec-tools 、 ipset、 iptables、 iputils-ping、 jq、 kmod、 kubectl、 ldap-utils、 less、 libpcap-dev、 man、 manpages-posix、 mtr、 net-tools、 netcat、 netcat-openbsd、 openssl、 openssh-client、 psmisc 、socat、tcpdump、telnet、tmux、traceroute、tcptraceroute、树、ngrep、vim、wget、yq。

6-get-pods-containers-list6. 获取pod的容器列表

要检索 pod 内的容器列表,您可以使用别名kgpc当您需要使用 Pod 中的特定容器时,这非常有用:

$> kgpc ebs-csi-controller-b77c4f786-dxv4g -n kube-system
+ kubectl get pod -o jsonpath={.spec.containers[*].name} ebs-csi-controller-b77c4f786-dxv4g -n kube-system
# ebs-plugin csi-provisioner csi-attacher csi-snapshotter csi-resizer liveness-probe

7-ping-a-service7.Ping 服务

测试 Kubernetes 服务的可用性可能具有挑战性。kping别名使用HTTP Ping Docker 映像来 ping 服务并检查其可用性:

$> kgsvc
+ kubectl get service
# NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
# api                    ClusterIP   172.20.251.151   <none>        80/TCP     12d
# auth-server            ClusterIP   172.20.241.45    <none>        80/TCP     144d
# backend                ClusterIP   172.20.89.116    <none>        80/TCP     144d
# webapp                 ClusterIP   172.20.68.65     <none>        80/TCP     144d
$> kping auth-server:80
+ kubectl run httping -it --image bretfisher/httping --image-pull-policy=IfNotPresent --rm=true -- auth-server:80
# If you don't see a command prompt, try pressing enter.
# connected to 172.20.241.45:80 (159 bytes), seq=1 time=  4.63 ms
# connected to 172.20.241.45:80 (159 bytes), seq=2 time=  2.07 ms
# connected to 172.20.241.45:80 (159 bytes), seq=3 time=  1.90 ms
# connected to 172.20.241.45:80 (159 bytes), seq=4 time=  2.30 ms

8-get-a-runnable-manifest-of-an-deployed-resource8. 获取已部署资源的可运行清单

使用 检索已部署资源的 YAML 时kubectl get pod -o=yaml,某些字段是不必要的,并且可能会在重新部署 YAML 时导致问题。别名kyaml通过提供排除不必要字段的可运行清单来解决此问题。

这取决于先决条件中提到的kubectl-neat 。

9-delete-failed-and-evicted-pods9. 删除失败(和驱逐)的 Pod

失败的 Pod 可能会使集群混乱并影响性能。krmfailed别名允许您轻松删除当前命名空间中失败的 Pod。

conclusion结论

这些 kubectl 别名提供了一种简化 Kubernetes 管理任务的便捷方法。通过使用这些别名,您可以在使用 kubectl 命令时节省时间和精力。无论您需要检索特定信息、对 Pod 进行故障排除还是管理资源,这些别名都可以满足您的需求。

因此,请尝试一下,享受更高效的 Kubernetes 管理体验!

缺少一些有用的别名?请在评论里指教🤓

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
18天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
161 77
|
4天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
41 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
40 19
|
28天前
|
Kubernetes 监控 云计算
Docker与Kubernetes的协同工作
Docker与Kubernetes的协同工作
|
28天前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
50 1
|
28天前
|
Kubernetes 开发者 Docker
Docker与Kubernetes的协同工作
Docker与Kubernetes的协同工作
|
2月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
4月前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。
|
开发框架 Kubernetes 负载均衡
宝塔面板+Rancher+阿里云镜像仓库+Docker + Kubernete s,添加集群、部署 web 应用
前言: 本文使用 Centos 7.x 进行操作,Rancher 官方推荐使用 Ubuntu。 Docker 对内核要求 大于 3.10,你可以使用 uname -r 检测系统内容版本。 通过 Rancher,可以很方便地对多个主机进行管理,实现负载均匀、集群、分布式构架、故障转移、状态监控等。
3177 0
宝塔面板+Rancher+阿里云镜像仓库+Docker + Kubernete s,添加集群、部署 web 应用
|
JSON Kubernetes 应用服务中间件
【Docker】Kubernetes集群 yaml部署应用样例
非常简单的yaml配置~,对配置参数标注了说明
1610 0
【Docker】Kubernetes集群 yaml部署应用样例