k8s(two)

作者: Freestyle_0f85 | 来源:发表于2020-01-14 09:21 被阅读0次

    1.k8s常用的资源

    k8s yaml的主要组成

    apiVersion: v1  api版本
    kind: pod   资源类型
    metadata:   属性
    spec:       详细
    

    k8s_pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: 10.0.0.11:5000/nginx:1.13
          ports:
            - containerPort: 80
    
    1.构建命令
    kubectl create -f k8s_pod.yaml
    2.查看状态
    kubectl get pod nginx -o wide
    3.描述pod状态
    kubectl  describe  pod  nginx
    4.删除pod
    kubectl  delete   pod  nginx   或者kubectl delete  -f  xxx.yaml
    5.编辑pod的配置
    kubectl  edit  pod   nginx
    

    这里需要注意的是构建会失败,因为从节点下载pod-infrastructure镜像是从官网,需要红帽证书,所以我们用下载好的上传到本地自己的镜像仓库。

    改变两个从节点
    vim /etc/kubernetes/kubelet
    # pod infrastructure container
    KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-i
    mage=10.0.0.11:5000/pod-infrastructure:latest"
    
    systemctl restart kubelet
    

    pod资源:至少由两个容器组成,pod基础容器和业务容器组成

    pod配置文件2:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: 10.0.0.11:5000/nginx:1.13
          ports:
            - containerPort: 80
        - name: busybox
          image: 10.0.0.11:5000/busybox:latest
          command: ["sleep","10000"]
    

    pod是k8s最小的资源单位

    2.ReplicationController资源

    rc:保证指定数量的pod始终存活,rc通过标签选择器来关联pod
    创建一个rc.yaml文件

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: nginx
    spec:
      replicas: 5
      selector:
        app: myweb
      template:
        metadata:
          labels:
            app: myweb
        spec:
          containers:
          - name: myweb
            image: 10.0.0.11:5000/nginx:1.13
            ports:
            - containerPort: 80
    

    rc的滚动升级 新建一个nginx-rc1.15.yaml


    image.png
    升级
    kubectl rolling-update nginx -f nginx-rc1.15.yaml --update-period=10s
    
    回滚
    kubectl rolling-update nginx2 -f nginx-rc.yaml --update-period=1s
    

    3. service资源

    image.png

    service帮助pod暴露端口

    创建一个service

    apiVersion: v1
    kind: Service
    metadata:
      name: myweb
    spec:
      type: NodePort  #ClusterIP
      ports:
        - port: 80          #clusterIP
          nodePort: 30000   #nodeport
          targetPort: 80    #podport
      selector:
        app: myweb
    
    #生成svc
    kubectl create -f k8s_svc.yaml 
    
    #查看svc的两种方法
    kubectl get svc 
    kubectl get service
    
    #查看所有资源类型
    kubectl get all -o wide
    
    #确保标签一样,修改为myweb
    kubectl edit svc myweb
        app: myweb
    标签需要确保一样,必须,很重要!!!
    #查看端口是否暴露成功
    kubectl describe svc myweb
    

    如何验证它的负载均衡呢?

    方法一:
    #修改副本数
    kubectl scale rc nginx --replicas=2
    方法二:
    #进入容器
    kubectl exec -it pod_name /bin/bash
    #k8s进入容器的方法
    [root@k8s-master svc]# kubectl exec -it nginx-5mf4r /bin/bash
    root@nginx-5mf4r:/# echo '11111' >/usr/share/nginx/html/index.html 
    root@nginx-5mf4r:/# exit
    
    [root@k8s-master svc]# kubectl exec -it nginx-ppjb3 /bin/bash
    root@nginx-ppjb3:/# echo '2222' >/usr/share/nginx/html/index.html 
    root@nginx-ppjb3:/# exit
    
    添加随机端口
    [root@k8s-master svc]# vim /etc/kubernetes/apiserver
    KUBE_API_ARGS="--service-node-port-range=3000-50000"
    [root@k8s-master svc]# systemctl restart kube-apiserver.service
    

    service默认使用iptables来实现负载均衡, k8s 1.8新版本中推荐使用lvs(四层负载均衡)

    4.deployment资源

    有rc在滚动升级之后,会造成服务访问中断,于是k8s引入了deployment资源

    创建deployment

    1、编辑deploy的yaml文件
    cat k8s_deploy.yaml
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: 10.0.0.11:5000/nginx:1.13
            ports:
            - containerPort: 80
            resources:
              limits:
                cpu: 100m
              requests:
                cpu: 100m
    2.编辑实现负载的yaml文件
    cat k8s_svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-deployment 
    spec:
      type: NodePort  #ClusterIP
      ports:
        - port: 80          #clusterIP
          nodePort: 30001   #nodeport
          targetPort: 80    #podport
      selector:
        app: nginx
    
    
    方法一:
    deployment升级和回滚
    
    命令行创建deployment
    
    kubectl run   nginx  --image=10.0.0.11:5000/nginx:1.13 --replicas=3 --record
    
    命令行升级版本
    
    kubectl set image deploy nginx nginx=10.0.0.11:5000/nginx:1.15
    
    查看deployment所有历史版本
    
    kubectl rollout history deployment nginx
    
    deployment回滚到上一个版本
    
    kubectl rollout undo deployment nginx
    
    deployment回滚到指定版本
    
    kubectl rollout undo deployment nginx --to-revision=2
    方法二:
    #修改配置文件中的此行改为nginx 1.15
    [root@k8s-master deploy]# kubectl edit deployment nginx-deployment
          - image: 10.0.0.11:5000/nginx:1.15
    

    5.tomcat+mysql练习

    在k8s中容器之间相互访问,通过VIP地址!

    1.上传配置
    [root@k8s-master tomcat_demo]# ll
    total 16
    -rw-r--r-- 1 root root 416 Jan 13 22:46 mysql-rc.yml
    -rw-r--r-- 1 root root 145 Jan 13 22:29 mysql-svc.yml
    -rw-r--r-- 1 root root 492 Jan 13 23:37 tomcat-rc.yml
    -rw-r--r-- 1 root root 162 Jan 13 22:17 tomcat-svc.yml
    2.创建
    先创建mysql
    kubectl create -f mysql-rc.yml
    kubectl create -f mysql-svc.yml
    kubectl get all -o wide查看mysql虚拟ip
    vim tomcat-rc.yml
              - name: MYSQL_SERVICE_HOST
                value: '10.254.146.149'
    更改ip
    kubectl create -f  tomcat-rc.yml
    kubectl create -f tomcat-svc.yml
    kubectl get all -o wide
    启动成功后登陆
    
    image.png image.png

    相关文章

      网友评论

        本文标题:k8s(two)

        本文链接:https://www.haomeiwen.com/subject/iqgnactx.html