使用 Kubectl 管理 Kubernetes 容器平台

准备工作:

一、Kubectl 概述

Kubectl 是一个用于操作 kubernetes 集群的命令行接口,通过利用 Kubectl 的各种命令可以实现各种功能。

二、Kubectl 创建和删除一个 pod 相关操作

命令 说明
run 在集群上运行一个 pod
create 使用文件或标准输入的方式创建一个 pod
delete 使用文件或者标准输入以及资源名称或者标签选择器来删除某个 pod

1.在集群上运行一个镜像

将 docker.io-nginx.tar 和 pod-infrastructure.tar 上传到 node1 和 node2 上并导入镜像
node1,node2操作一致:

[root@node1 ~]# ls
anaconda-ks.cfg      k8s-package         pod-infrastructure.tar
docker.io-nginx.tar  k8s-package.tar.gz
[root@node1 ~]# docker load -i docker.io-nginx.tar 
[root@node1 ~]# docker load -i pod-infrastructure.tar

在这里插入图片描述

2.Kubectl run 语法

Kubectl run 和 Docker run 一样,Kubectl run 能将一个 pod 运行起来。

  • 格式kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas]

在 master上 启动 pod:

[root@master ~]# kubectl run nginx-1 --image=docker.io/nginx --replicas=1 --port=9000		

在这里插入图片描述
查看 Deployment:

[root@master ~]# kubectl get deployment

在这里插入图片描述
查看生成的 pod,kubernetes 将容器运行在 pod 中以方便实施卷和网络共享等管理

[root@master ~]# kubectl get pods

在这里插入图片描述

3.pods 常见的状态

  • ContainerCreating:容器正在创建。
  • ImagePullBackOff:从后端把镜像拉取到本地时中断。
  • terminating:终止;当删除 pod 时的状态。
  • Running:正常运行的状态。

3.使用 Kubectl delete 删除创建的对象

1)删除 pod

[root@master ~]# kubectl delete pod nginx-1-2637872784-5kg5l
[root@master ~]# kubectl get pod

在这里插入图片描述
过 2 分钟左右,再次确认,发现已经运行
在这里插入图片描述

2)删除 deployment

直接删除 pod 触发了 replicas 的确保机制,所以需要删除 deployment

[root@master ~]# kubectl delete deployment nginx-1
[root@master ~]# kubectl get pod

在这里插入图片描述

三、yaml 语法规则

YAML 语言的设计目标,就是方便人类读写。它实质上是一种数据串行化格式。

1.yaml 语法的基本语法规则

  • 大小写敏感。
  • 使用缩进表示层级关系。
  • 缩进时不允许使用 Tab 键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
  • " # " 表示注释,从这个字符一直到行尾,都会被解析器忽略。
  • 在 yaml 里面,连续的项目(如:数组元素、集合元素)通过减号 " - " 来表示,map 结构里面的键值对(key/value)用冒号 " : " 来分割。

2.yaml 支持的三种数据结构

  • 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)。
  • 数组:一组按次序排列的值,又称为序列(sequence)/列表(list)。
  • 纯量(scalars):单个的、不可再分的值。

四、Kubectl create 加载 yaml 文件生成 deployment

使用 Kubectl run 在设置很复杂的需求时,需要非常长的一条语句,也很容易出错,也没法保存,所以更多场景下会使用 yaml 或者 json 文件。

1.生成 mysql-deployment.yaml 文件

上传 docker.io-mysql-mysql-server.tar 到 node1 和 node2 上
node1,node2操作一致

[root@node1 ~]# docker load -i docker.io-mysql-mysql-server.tar

在这里插入图片描述

[root@master ~]# vim mysql-deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: mysql
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: mysql
    spec:
      containers:
      - name: mysql
        image: docker.io/mysql/mysql-server
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
          protocol: TCP
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: "123123"

在这里插入图片描述

2.使用 mysql-deployment.yaml 创建和删除 mysql 资源

[root@master ~]# kubectl create -f mysql-deployment.yaml 

在这里插入图片描述

  • 注意:当一个目录下,有多个 yaml 文件的时候,使用 kubectl create -f 目录 的方式一下全部创建。

3.使用 get 参数查看 pod 详细信息

[root@master ~]# kubectl get pod
[root@master ~]# kubectl get deployment

在这里插入图片描述
加上 -o wide 参数可以查看更详细的信息,比如想看到此 pod 在哪个 node 上运行,此 pod 的集群 IP 是多少也会显示。

[root@master ~]# kubectl get pod -o wide

在这里插入图片描述

  • 注意:10.255.5.2 这个IP地址是 flannel 中定义的网段中的一个IP地址。pod 通过这个 IP 和 master 进行通信

在 node2 上查看运行 mysql docker 实例:

[root@node2 ~]# docker ps

在这里插入图片描述

4.使用 describe 查看 k8s 中详细信息

  • 查看 pod 的详细描述信息:kubectl describe pod pod名字
  • 查看 node 的详细描述信息:kubectl describe node node名字
  • 查看 deployment 的详细描述信息:kubectl describe deployment deployment名字

五、Kubectl 其他常用命令和参数说明

命令 说明
logs 取得 pod 中容器的 log 信息
exec 在 pod 中执行一条命令
cp 从容器拷出或向容器拷入文件
attach attach 到一个运行中的容器上,实时查看容器消息

1.Kubectl logs

类似于 Docker logs,使用 Kubectl logs 能够取出 pod 中镜像的 log,也是故障排除时候的重要信息。

[root@master ~]# kubectl get pod
[root@master ~]# kubectl logs mysql-2388517676-588kb

在这里插入图片描述

2.Kubectl exec

exec 命令用于到 pod 中执行一条命令。

[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec -it mysql-2388517676-588kb bash
bash-4.2# exit

在这里插入图片描述

3.Kubectl attach

attach 用于取得 pod 中容器的实时信息,可以持续不断实时的取出消息。

[root@master ~]# kubectl attach mysql-2388517676-588kb

在这里插入图片描述

  • 注意: 到现在,所创建 nginx 和 mysql 都只是 deployment 设备硬件资源,并没有对应 service 服务,所以现在还不能能直接在外网进行访问 nginx 和 mysql 服务。

六、使用 Kubectl 管理集群中 deployment 资源和 service 服务

1.生成 nginx-deployment.yaml 资源和 nginx-svc.yaml 服务的配置文件

使用 Deployment 方式启动 nginx 的 pod 和 service

[root@master ~]# vim nginx-deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image:  docker.io/nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          protocol: TCP

在这里插入图片描述

[root@master ~]# vim nginx-svc.yaml			#创建 service
kind: Service
apiVersion: v1
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  type: NodePort
  ports:
  - protocol: TCP
    nodePort: 31001
    targetPort: 80
    port: 80
  selector:
    name: nginx

在这里插入图片描述

2.创建 deployment 和 serveice

[root@master ~]# kubectl create -f nginx-deployment.yaml 
[root@master ~]# kubectl create -f nginx-svc.yaml

在这里插入图片描述
查看:

[root@master ~]# kubectl get service
或者
[root@master ~]# kubectl get svc

在这里插入图片描述
查看详细信息:

[root@master ~]# kubectl get pod -o wide

在这里插入图片描述

  • 注意:发现 nginx 容器中的 80 端口已经映射到 node(Minion 物理机)节点的 31001 端口上了。可以查看到 nginx 服务已经运行在 node1 上。

使用浏览器访问测试:
在这里插入图片描述
尽管 nginx 的 pod 是在 node1 运行的,但我们去访问任意 node,都可以正常访问 nginx 的。已经做了负载均衡。所以在 node2 上也可以成功访问 web 服务。
在这里插入图片描述
修改一下默认主页:

[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec -it nginx-1011335894-shsfx bash
root@nginx-1011335894-shsfx:/# echo Nginx > /usr/share/nginx/html/index.html     
root@nginx-1011335894-shsfx:/# exit

在这里插入图片描述
使用浏览器访问测试:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46902396/article/details/111030009
今日推荐