learn-tech/专栏/Kubernetes入门实战课/16视频:初级篇实操总结.md
2024-10-16 06:37:41 +08:00

9.2 KiB
Raw Blame History

                        因收到Google相关通知网站将会择期关闭。相关通知内容
                        
                        
                        16 视频:初级篇实操总结
                        你好我是Chrono。

学完了前面的7节文字+音频的课程之后今天又是一节视频课程对“初级篇”里Kubernetes知识做一个回顾与总结同样还是注重实际操作的演示而不会讲解理论知识。

首先我们会启动本机环境里的minikube登录虚拟节点看看apiserver、etcd、scheduler等组件然后使用命令行工具kubectl操作Kubernetes创建Pod、Job、CronJob、ConfigMap、Secret等API对象。

接下来我们视频上见。

一. minikube环境

视频操作要点:

我们从minikube环境开始安装的过程就不演示了我假设你已经按照[第9讲]里的步骤成功下载了minikube和kubectl的二进制文件。

先看一下minikube的版本号

minikube version

显示的是当前的最新版本1.25.2,再看一下它的状态:

minikube status

可以看到Kubernetes的组件都没有启动集群处于停止状态。

现在让我们用 minikube start 启动minikube集群

minikube start --kubernetes-version=v1.23.3

稍等一小会看看它提示里的表情符号一个本地的微型Kubernetes集群就创建好了。从提示信息里可以看到这个Kubernetes集群的版本是v1.23.3运行在Docker 20.10.12上。

现在我们再看一下minikube的状态

minikube status

可以看到Kubernetes的核心组件kubelet、apiserver都是运行状态了。

命令 minikube node list 可以查看这个微型集群的节点列表:

minikube node list

默认情况下minikube只会创建一个节点这里显示它的IP地址是“192.168.49.2”。

我们可以使用命令 minikube ssh 直接登录到这个节点是虚拟机里的一个虚拟机在里面可以执行任意的Linux操作

uname -a #显示是Ubuntu操作系统 docker version #这个节点里也跑了一个docker但其实是复用了宿主机的docker docker ps #能够看到节点里以容器形式运行的Kubernetes进程比如pause、scheduler等等 exit

看完了minikube集群的状态让我们用kubectl来操作Kubernetes首先是看版本号

kubectl version

显示版本是1.23.3。用 kubectl get pod 看看当前集群里运行的运行应用,会发现是空的。

让我们用 run 命令运行一个Nginx Pod

kubectl run ngx --image=nginx:alpine

这个时候我们再查看Pod kubectl get pod 就会看到有一个Pod运行了。

这个Nginx pod属于default名字空间而apiserver等核心组件是在kube-system名字空间你可以用 -n 参数查看在kube-system里运行的Pod

kubectl get pod -n kube-system

可以看到apiserver、etcd、scheduler、controller manager、coredns、kube-proxy等组件都是以Pod的形式在这里运行。

二. 用kubectl操作API对象

视频操作要点:

下面我们把注意力集中在kubectl操作Kubernetes API对象上。

先来查看当前Kubernetes版本支持的所有api对象命令是 kubectl api-resources

kubectl api-resources

它的输出信息很多你可以看到Pod的简写是po、api version是v1、CronJob的简写是cj、api version是batch/v1这些信息在我们编写YAML描述文件的时候非常有用。

再来看另一个常用的命令 kubectl explain它能够给出api对象字段的详细信息比如查看Pod

kubectl explain pod kubectl explain pod.metadata kubectl explain pod.spec kubectl explain pod.spec.containers

有了这个随手可得的文档我们在编写YAML文件的时候就不会不知所措了。

创建YAML样板要用到两个特殊参数“dry-run=client”和“-o yaml”我把它定义成一个环境变量

export out="--dry-run=client -o yaml"

然后我们再创建一个Pod的YAML

kubectl run ngx --image=nginx:alpine $out > pod.yml

用vi编辑这个文件删除不需要的字段一个YAML描述文件形式的API对象就创建好了。

三. Pod对象

视频操作要点:

我们来看一个已经编辑好的Nginx pod对象里面定义了名字是ngx-pod有两个标签env和ownerspec里的containers定义了Pod里只有一个容器镜像是nginx:alpine对外的端口是80。

现在就可以使用命令 kubectl apply 创建这个Pod再用 kubectl get pod 来查看状态:

kubectl apply -f ngx-pod.yml kubectl get pod

命令 kubectl logs 会输出Nginx的运行日志

kubectl logs ngx-pod

我们还可以用 kubectl exec 进入Pod里的容器注意要有 --

kubectl exec -it ngx-pod -- sh nginx -v uname -a exit

最后我们用 kubectl delete 删除这个Pod

kubectl delete -f ngx-pod.yml

四. 离线业务对象Job、CronJob

视频操作要点:

看完了Pod的基本操作之后我们来看离线业务的对象Job和CronJob。

首先要用 kubectl create 创建一个Job样板文件

kubectl create job echo-job --image=busybox $out

把它保存编辑之后我们就得到了一个Job对象用vi看一下。这个Job非常简单执行echo命令输出hello world。注意它的restartPolicy是OnFailure表示失败后要原地重启容器。

现在来创建Job对象用的命令还是 kubectl apply

kubectl apply -f job.yml

创建之后用 kubectl get job、kubectl get pod 来分别查看Job和Pod的状态使用命令 kubectl logs 来获取Pod的运行结果

kubectl get job kubectl get pod kubectl logs echo-job-l52l7

CronJob同样也可以自动生成样板文件

kubectl create cj echo-cj --image=busybox --schedule="" $out vi cronjob.yml

CronJob对象里要注意的是它使用jobTemplate又定义了一个Job然后在字段schedule里使用cron语法定义了定时运行的规则这里就是每分钟运行一次。

CronJob的用法和Job几乎是一样的用 apply 命令创建后就可以用get来查看作业的运行状态

kubectl apply -f cronjob.yml kubectl get cj kubectl get pod

最后让我们用 delete 命令删除这两个API对象

kubectl delete -f job.yml kubectl delete -f cronjob.yml

五. 配置信息对象ConfigMap和Secret

视频操作要点:

下面我来演示Kubernetes里的配置信息对象ConfigMap和secret。

还是老办法,先用 kubectl create 创建ConfigMap的样板文件不过要命令后面多加一个参数 --from-literal ,从字面值生成一些数据:

kubectl create cm info --from-literal=k=v $out

Secret也是同样的创建方式注意命令形式与ConfigMap略有不同要用generic表示一般的机密信息

kubectl create secret generic user --from-literal=name=root $out

我们来看看已经编辑好的YAML文件:

vi cm.yml

这里定义了4个配置项注意ConfigMap要求必须是字符串所以最好用引号引起来避免解释成数字导致错误。

vi secret.yml

Secret里定义了3个配置项由于做了base64编码不能直接看到原值不过我们可以在命令行里用工具base64 -d解码比如看用户名

echo cm9vdA== | base64 -d

现在让我们创建这两个对象:

kubectl apply -f cm.yml kubectl apply -f secret.yml

然后查看这些对象的状态:

kubectl get cm kubectl describe cm info

ConfigMap是明文显示

kubectl get secret kubectl describe secret user

而Secret的类型是Opaque不透明的不能直接看到。

接下来我们把这些配置信息以存储卷的形式注入Pod需要在Pod里加入“volumes”和“volumeMounts”字段

vi vol-pod.yml

在这份YAML里我为ConfigMap和Secret定义了两个volume分别是cm-vol和sec-vol然后在volumeMounts里把它们挂载到了tmp目录。

用 kubectl apply 命令创建之后,我们还是用 kubectl exec 进入Pod看看配置信息被加载成了什么形式

kubectl apply -f vol-pod.yml kubectl get pod kubectl exec -it vol-pod -- sh

cd /tmp ls #加载成两个目录 cd cm-items/ cat greeting cd .. cd sec-items/ cat pwd #已经被base64解码

六. 在Kubernetes里搭建WordPress

视频操作要点:

最后我们在Kubernetes里搭建WordPress这些YAML文件都已经准备好了只需要逐个用 apply 命令创建就可以。

首先是MariaDB数据库

kubectl apply -f mariadb-pod.yml kubectl get pod -o wide

需要看它的IP地址这里是172.17.0.然后我们修改WordPress YAML环境变量host改成MariaDB的地址然后再创建WordPress Pod

kubectl apply -f wp-pod.yml kubectl get pod -o wide

现在这两个Pod都已经正常运行了我们需要把WordPress的端口暴露出来用的是 kubectl port-forward 命令:

kubectl port-forward wp-pod 8080:80 &

然后我们用Docker运行Nginx容器代理这个端口

./wp_proxy.sh docker ps

现在我们打开Mac上的Safari浏览器输入虚拟机的IP地址“http://192.168.10.208”就可以看到WordPress的安装界面了

课下作业

今天是动手操作课,记得让自己实际上手操作一遍,毕竟看一遍和写一遍学习效果完全不同哦。

欢迎分享自己的学习体验和疑问,在留言区参与讨论。我们下节课见。