第二章-K8S核心概念与集群搭建使用

实操题目

1、使用Kubeadm搭建一个K8s集群
2、新建命名空间,在该命名空间中创建一个pod
3、创建一个deployment并暴露Service
名称:web
镜像:nginx
4、列出命名空间下指定标签pod
命名空间名称:kube-system
标签:k8s-app=kube-dns


以下为实操题目的步骤及验证过程

一、使用Kubeadm搭建一个K8s集群

使用kubeadm部署k8s v1.20.0可参考:《CentOS7 Kubeadm 部署Kubernetes 1.20.0》
[root@k8s-master ~]# kubectl get node -o wide
在这里插入图片描述


二、新建命名空间,在该命名空间中创建一个pod

题目要求:命名空间名称为:zfj-test,pod名称为:pod-01,镜像使用:nginx

2.1 使用命令行创建对象

[root@k8s-master ~]# kubectl create namespace zfj-test	#创建zfj-test命名空间
[root@k8s-master ~]# kubectl run --image=nginx -n zfj-test pod-01	#基于nginx镜像运行一个pod
[root@k8s-master ~]# kubectl get pods -n zfj-test	#查看zfj-test命名空间下的pod资源

在这里插入图片描述

2.2 使用声明式API创建对象(yaml文件方式):

[root@k8s-master ~]# vim pod-01.yaml
apiVersion: v1                  #api版本
kind: Pod                       #创建的资源对象为Pod
metadata:                       #元数据
  name: pod-01                  #Pod名称
  namespace: zfj-test           #命名空间
  labels:                       #为Pod添加标签
    app: nginx                  #标签为app=nginx
spec:                           #期望状态
  containers:                   #容器配置
  - name: nginx                 #容器名称
    image: nginx                #容器镜像
[root@k8s-master pod]# kubectl apply -f pod-01.yaml 
[root@k8s-master pod]# kubectl get pods -n zfj-test

在这里插入图片描述
以上两种方式都可以完成题目要求,只是第一种是直接使用kubectl命令行创建,第二个是使用声明式方式创建(yaml或者json文件创建)


三、创建一个deployment并暴露Service

题目要求:名称为:web,镜像为:nginx,副本数为2,命名空间为zfj-test

3.1 使用命令行创建对象

3.1.1 创建Deployment资源
[root@k8s-master ~]# kubectl create deployment web --image=nginx --replicas=2 -n zfj-test	#在zfj-test命名空间下创建名为web,副本数为2的Deployment控制器
[root@k8s-master ~]# kubectl get deployments,pods -n zfj-test -l app=web

在这里插入图片描述

3.1.2 创建Service资源
#基于deployment控制器暴露容器,--port为service-cliusterIP的端口,--target-port为容器监端口口,--type为Service类型,-n为指定命名空间
[root@k8s-master ~]# kubectl expose deployment web --port=80 --target-port=80 --type=NodePort -n zfj-test
[root@k8s-master ~]# kubectl get service -n zfj-test -o wide		#查看service资源信息
[root@k8s-master ~]# curl http://ClusterIP					#集群内部测试访问

在这里插入图片描述

集群外部测试访问:集群外部的客户端需要访问的话,访问k8s集群中任意一个节点的30815端口即可。30815端口为宿主机的随机端口。当外部客户端访问这一个端口时,宿主机默认会通过iptables规则将请求转发给对应的Pod进行响应。
在这里插入图片描述
在这里插入图片描述


3.2 使用声明式API创建对象

3.2.1 yaml文件创建Deployment控制器
[root@k8s-master deployment]# vim web-deployment.yaml
apiVersion: apps/v1             #API版本
kind: Deployment                #创建的资源类型
metadata:                       #Deployment元数据
  labels:                       #Deployment配置标签
     app: web                    #标签为app=web
  name: web                     #Deployment名称为web
  namespace: zfj-test           #指定命名空间
spec:                           #Deployment期望状态
  replicas: 2                   #Pod副本数
  selector:                     #标签选择器
    matchLabels:                #匹配标签
      app: web                  #匹配存在app=web标签的Pod对象
  template:                     #Pod模板
    metadata:                   #Pod元数据
      labels:                   #Pod标签
        app: web                #Pod标签为app=web
    spec:                       #Pod期望状态
      containers:               #容器配置
      - image: nginx            #容器镜像为nginx
        name: nginx             #容器名称为nginx
[root@k8s-master deployment]# kubectl apply -f web-deployment.yaml
[root@k8s-master deployment]# kubectl get deployments.apps -n zfj-test

在这里插入图片描述

3.2.2 yaml文件创建Service资源
[root@k8s-master service]# vim web-service.yaml 
apiVersion: v1                  #api版本
kind: Service                   #创建的资源类型
metadata:                       #Service元数据
  labels:                       #Service标签
    app: web                    #标签为app=web
  name: web                     #Service名称为web
  namespace: zfj-test           #指定命名空间名称
spec:                           #Service期望状态
  ports:                        #端口配置
  - port: 80                    #Service端口为80
    protocol: TCP               #协议为TCP
    targetPort: 80              #容器监听端口为80
  selector:                     #标签选择器
    app: web                    #匹配标签存在app=web的Pod对象
  type: NodePort                #Service类型为NodePort,其中还有Cluster,LoadBalancer
[root@k8s-master service]# kubectl apply -f web-service.yaml
[root@k8s-master service]# kubectl get svc -n zfj-test -o wide

在这里插入图片描述

集群外部客户端浏览器访问:
http://Node-ip:NodePort/
在这里插入图片描述


四、列出命名空间下指定标签pod

题目要求:命名空间名称:kube-system,标签:k8s-app=kube-dns

[root@k8s-master ~]# kubectl get pods -n kube-system --show-labels	#查看kube-system命名空间下所有pod及对应的标签。-n为指定命名空间,--show-labels为显示标签
[root@k8s-master ~]# kubectl get pods -n kube-system -l k8s-app=kube-dns --show-labels	#筛选kube-system命名空间下标签为k8s-app=kube-dns的Pod。-l为筛选标签

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐