k8s搭建一些常用服务示例

在博客Kubernetes集群搭建(CentOS7) 搭建完成的基础上,为了验证集群是否可用搭建一些常见的服务

一、Nginx

为了快速地验证一下上面搭建集群是否可用,我们创建一个Nginx Deployment:

$ kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

使用命令kubectl get pods,svc查看是否正常:

QQ截图20191028221659.png

使用命令kubectl get pods,svc -o wide查看该Pod具体位于哪一个节点:

QQ截图20191028221805.png

可以看到其位于Node2节点,该节点IP为192.168.33.13,端口为30935,使用浏览器访问该地址:

QQ截图20191028221923.png

使用kubectl get pods命令查看Pod的情况:

QQ截图20191029202111.png

使用kubectl delete命令删除这个Pod看看会怎样:

QQ截图20191029202330.png

可以看到,刚刚的名为xxx的Pod处于Terminating(结束中)的状态,而另一个新的名为xxx的Pod正处于ContainerCreating(创建中)状态,因为默认情况下,replicas的值为1,Kubernetes集群会始终保持Nginx的实例为1。

要删除Nginx可以通过删除deployment来完成,使用kubectl get deployments命令查看当前的deployment:

QQ截图20191029202412.png

使用命令kubectl delete deployment nginx

QQ截图20191029202439.png

实际中我们一般通过yml或者json文件来创建应用,下面我们使用yml的方式创建一个3实例的Nginx集群:

vim nginx-rc.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-rc
spec:
  replicas: 3
  selector:
    name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
    - port: 8080
      targetPort: 80
      protocol: TCP
  type: NodePort
  selector:
    name: nginx

接着执行下面这两条命令启动Nginx集群:

kubectl create -f nginx-rc.yml

使用kubectl get pods命令查看Pod情况:

QQ截图20191029202540.png

使用kubectl get services命令查看Service情况:

QQ截图20191029202644.png

使用kubectl describe svc nginx-service命令查看Nginx Service详情:

QQ截图20191029202719.png

使用命令kubectl get pods,svc -o wide查看Nginx Pod具体位于哪一个节点:

QQ截图20191029202746.png

可以看到在node1和node2节点上都有Nginx的Pod,使用浏览器访问http://192.168.33.12:32631/或者http://192.168.33.13:32631/:

QQ截图20191029202923.png

删除的话执行下面这两条命令即可:

kubectl delete -f nginx-rc.yml

参考文章:https://mrbird.cc/Kubeadm-install-Kubernetes1-16-2-cluster.html

二、Tomcat

编写资源文件

tomcat-rc.yaml

基于ReplicationController的副本控制器ymal文件

apiVersion: v1
kind: ReplicationController
metadata:
  name: test-tomcat
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: test-tomcat
    spec:
      containers:
      - name: test-tomcat
        image: docker.io/tomcat
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: test-tomcat
spec:
   ports:
   - port: 8080
     targetPort: 8080
     nodePort: 31111
   selector:
     app: test-tomcat
   type: NodePort

kubectl create -f tomcat-rc.yaml

基于deployment的副本控制器ymal文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mytomcat
spec:
  replicas: 5
  selector:
    matchLabels:
      app: mytomcat
  minReadySeconds: 1
  progressDeadlineSeconds: 60
  revisionHistoryLimit: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      name: mytomcat
      labels:
        app: mytomcat
    spec:
      containers:
      - name: mytomcat
        image: tomcat:8
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: tz-config
          mountPath: /etc/localtime
      volumes:
      - name: tz-config
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: Service
metadata:
  name: mytomcat
spec:
  type: NodePort
  ports:
   - port: 8080
     nodePort: 30012
  selector:
    app: mytomcat

参考文章:

配置文件写法部分

https://www.cnblogs.com/spll/p/10075781.html

https://blog.csdn.net/u013201439/article/details/79306417

posted @ 2022-06-12 19:59  黄河大道东  阅读(164)  评论(0编辑  收藏  举报