zoukankan      html  css  js  c++  java
  • 学习k8s(四)

    1、K8S核心组件

    1、Master节点:
      etcd:            分布式键值对数据库,保存集群状态
      api-server:     接受并响应用户的请求
      controller:     控制器管理,控制容器的副本数,故障检测
      scheduler:      资源调度器,选择启动容器的node节点
    2、Node节点: kubelet: 调用docker,管理容器生命周期 kube-proxy: 提供网络访问,负载均衡

    2、k8s的安装部署

    1、安装docker(所有节点)
    # yum install docker-1.12.rpm
    # docker pull gcr.azk8s.cn/google_containers/pause-amd64:3.0  #国内镜像服务器
    # systemctl start docker
    
    2、安装etcd(key=value数据库)
    1) 安装配置
    # yum install -y etcd
    # vim /etc/etcd/etcd.conf 
      ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
      ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
    2) 启动服务
    # systemctl start etcd.service
    3) 端口检测及测试服务状态
    # etcdctl set name test                                 #设置name=test
    # etcdctl get name                                      #查看
    # netstat -lntp | grep etcd 
      2379                                                  #客户端连接端口
      2380                                                  #etcd集群连接端口
    
    3、安装k8s-master
    1) 安装配置
    # yum install kubernetes-master  -y
    # vim /etc/kubernetes/apiserver                         #主配置文件
      KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
      KUBE_API_PORT="--port=8080"
      KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379"
      KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
      KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
    # vim /etc/kubernetes/config                            #公共配置文件
      KUBE_MASTER="--master=http://10.0.0.11:8080"
    2) 启动服务
    # systemctl start kube-apiserver.service
    # systemctl start kube-controller-manager.service
    # systemctl start kube-scheduler.service
    3) 测试
    # kubectl get cs                                        #检测服务是否正常
    
    4、安装k8s-node
    1) 安装配置
    # yum install kubernetes-node  -y
    # vim /etc/kubernetes/config                            #公共配置文件
      KUBE_MASTER="--master=http://10.0.0.11:8080"
    # vim /etc/kubernetes/kubelet                           #主配置文件
      KUBELET_ADDRESS="--address=10.0.0.12"
      KUBELET_HOSTNAME="--hostname-override=10.0.0.12"
      KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"
    2) 启动服务
    # systemctl start kubelet.service
    # systemctl start kube-proxy.service
    3) 检查服务(master节点执行)
    # kubectl get nodes                                     
    
    5、安装flannel(跨主机通信)
    1) 安装配置(所有节点)
    # yum install flannel -y
    # vim /etc/sysconfig/flanneld
      FLANNEL_ETCD_ENDPOINTS="http://10.0.1.11:2379"
      FLANNEL_ETCD_PREFIX="/atomic.io/network"
    2) 配置网络(master节点)
    # etcdctl mk /atomic.io/network/config '{ "Network": "172.16.0.0/16" }'
    # etcdctl get /atomic.io/network/config
    3) 启动服务
    # systemctl start  flanneld.service
    4) 重启所有服务(所有节点)
    systemctl restart kube-apiserver.service
    systemctl restart kube-controller-manager.service
    systemctl restart kube-scheduler.service
    systemctl restart kubelet.service
    systemctl restart kube-proxy.service
    5) 检查服务
    ifconfig flannel0
    
    6、配置私有镜像仓库
    1) 配置镜像加速和私有仓库地址(master节点)
    # vim /etc/sysconfig/docker
      OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --registry-mirror=https://registry.docker-cn.com --insecure-registry=10.0.0.11:5000'
    # systemctl restart docker
    2) 启动私有仓库(master节点)
    # docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry  registry
    3) 推送镜像测试(node节点)
    # vim /etc/sysconfig/docker
      OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry=10.0.0.11:5000'
    # docker tag nginx 10.0.0.11:5000/oldguo/nginx:v1 
    # docker push 10.0.0.11:5000/oldguo/nginx:v1
    # docker images
    # docker pull 10.0.0.11:5000/oldguo/nginx:v1

    3、pod资源管理

    1、yaml的主要组成
      apiVersion: v1        api版本
      kind: pod             资源类型
      metadata:             属性
      spec:                 详细
    
    2、pod文件 # cat k8s_pod.yml apiVersion: v1 kind: Pod metadata: name: nginx labels: app: web spec: containers: - name: nginx image: 10.0.0.11:5000/oldguonginx:v1 ports: - containerPort: 80
    3、pod基本操作 创建 # kubectl create –f ks8_pod.yaml 查询 # kubectl get pod # kubectl get pod -o wide #查看资源列表 # kubectl describe pod #详细查询 # kubectl get pods -o wide --namespace=oldguo #查看不同命名空间的pod 删除 # kubectl delete pod nginx # kubectl delete -f ks8_pod.yaml 更新 # Kubectl replace ks8_pod.yaml # kubectl replace --force -f k8s_pod.yml #强制更新 其他 # kubectl explain pod.spec #yml编写帮助 # kubectl edit pod nginx #在线修改pod配置

     4、RC资源管理

    1、介绍
    ReplicationController: 副本控制器,rc通过标签(metadata)选择器(selector)来管理pod
    rc: 保证指定数量的pod始终存活,弹性伸缩,滚动升级
    
    2、创建rc文件
    # vim nginx-1.13-rc.yaml 
      apiVersion: v1
      kind: ReplicationController
      metadata:
        name: nginx                                 #rc名
      spec:
        replicas: 3                                 #副本数
        selector:
          app: nginx                                #管理pod名
        template:
          metadata:
            labels:
              app: nginx                            #pod名
          spec:
            containers:
            - name: nginx
              image: 10.0.0.11:5000/oldguo/nginx:1.13
              ports:
    
    3、rc的基本操作
    1) 创建
    # kubectl create -f nginx-1.13-rc.yaml
    2) 查看
    # kubectl get rc
    3) 删除pod,rc会自动创建
    # kubectl delete  rc nginx
    4) 更新
    # kuberctl edit rc nginx                        #在线修改(不常用)
    # kubectl scale rc nginx --replicas=2           #修改副本数(推荐)
    # kubectl replace -f nginx-1.13-rc.yaml         #更新(先删再创建,会停服,不推荐)
    5) 滚动的升级和回滚
    # kubectl rolling-update nginx -f nginx-1.15-rc.yaml --update-period=20s              #升级
    # kubectl rolling-update nginx -f nginx-1.13-rc.yaml --update-period=10s              #回滚
    # kubectl rolling-update nginx -f nginx-1.15-rc.yaml --update-period=10s --rollback   #升级中回退

    5、deployment资源管理

    1、介绍
    拥有rc的功能,支持事件,状态查看,版本记录等
    2、创建deployment文件 # vim nginx-dep.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx spec: replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: 10.0.0.11:5000/oldguo/nginx:1.13 ports: - containerPort: 80 3、deployment的基本操作 1) 创建 # kubectl create -f nginx-dep.yaml # kubectl create -f nginx-dep.yaml --record #记录执行的步骤 2) 查看 # kubectl get deploy 3) 删除 # kubectl delete deploy nginx 4) 更新 # kubectl scale deployment nginx --replicas=2 5) 滚动的升级和回滚 # kubectl set image deployment/nginx nginx=10.0.0.11:5000/oldguo/nginx:1.15 # kubectl rollout status deployment nginx #查看状态 # kubectl rollout history deployment nginx #查看历史状态 # kubectl rollout history deployment nginx --revision=2 #查看历史版本 # kubectl rollout undo deployment/nginx #回滚到上次版本 # kubectl rollout undo deployment nginx --to-revision=1 #回滚到指定版本

    5、service资源管理

    1、介绍
    service提供了一个固定虚拟VIP,通过IP访问pod,并且提供负载均衡
    Node IP -----> Cluster IP -----> Pod IP
    2、创建svc配置文件 # vim nginx-svc.yml apiVersion: v1 kind: Service metadata: name: nginx spec: type: NodePort ports: - port: 80 nodePort: 30001 selector: app: nginx
    3、svc的基本操作 1) 创建 # kubectl create -f nginx-svc.yaml 2) 查看 # kubectl get svc 3) 删除 # kubectl delete svc nginx 4) 更新 # kubectl scale deployment nginx --replicas=2

    6、持久化存储(PV和PVC)

    1、创建pv文件
    # vim  pv-test01.yaml 
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: test01-pv                                     #pv的名
        labels:
          pv: test01                                        #标签名
      spec:
        capacity:
          storage: 10Gi 
        accessModes:
          - ReadWriteMany 
        persistentVolumeReclaimPolicy: Recycle
        nfs:
          path: "/data"
          server: 10.0.0.11
          readOnly: false 
    # vim  pv-test02.yaml 
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: pv-test02                                     
        labels:
          pv: test02                                        
      spec:
        capacity:
          storage: 10Gi 
        accessModes:
          - ReadWriteMany 
        persistentVolumeReclaimPolicy: Recycle
        nfs:
          path: "/mysql"
          server: 10.0.0.11
          readOnly: false
      
    2、创建pvc文件
    # vim  pvc_nfs.yaml 
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc_nfs                                       #pvc的名
      spec:
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
        selector:
          matchLabels:
            pv: test01                                      #绑定指定的pv(指定标签名)
    # vim  pvc_mysql.yaml 
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc_mysql
      spec:
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
        selector:
          matchLabels:
            pv: test02
    
    3、创建
    # kubectl create -f pv-test01.yaml 
    # kubectl create -f pv-test02.yaml 
    # kubectl create -f pvc_nfs.yaml
    # kubectl create -f pvc_mysql.yaml 
    # kubectl get pv
    # kubectl get pvc

    7、wordpress项目

    1、安装配置NFS
    1) master节点
    # yum install -y nfs-utils-*
    # mkdir /data
    # mkdir /code
    # vim /etc/exports
      /data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
      /code 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
    # systemctl restart rpcbind
    # systemctl restart nfs
    # showmount -e
    2) node节点
    # yum install -y nfs-utils-*
    # systemctl restart rpcbind
    # systemctl restart nfs
    
    2、定义pv
    1) mysql的pv
    # vim pv_mysql.yml
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: pv-data
        labels:
          type: pv-mysql
      spec:
        capacity:
          storage: 10Gi
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Recycle
        nfs:
          path: "/data"
          server: 10.0.0.11
          readOnly: false
    2) wordpress的pv
    # vim pv_wp.yml
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: pv-code
        labels:
          type: pv-wp
      spec:
        capacity:
          storage: 10Gi
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Recycle
        nfs:
          path: "/code"
          server: 10.0.0.11
          readOnly: false
    
    3、定义pvc 
    1) mysql的pvc
    # vim pvc_mysql.yml
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc-mysql
      spec:
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
        selector:
          matchLabels:
            type: pv-mysql
    2) wordpress的pvc
    # vim pvc_wp.yml
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc-wp
      spec:
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
        selector:
          matchLabels:
            type: pv-wp
    
    4、创建 pv 和 pvc
    # kubectl create -f pv_mysql.yml 
    # kubectl create -f pv_wp.yml
    # kubectl create -f pvc_mysql.yml 
    # kubectl create -f pvc_wp.yml
    # kubectl get pv
    # kubectl get pvc
    
    5、创建mysql的rc
    # vim mysql-rc.yaml
      apiVersion: v1
      kind: ReplicationController
      metadata:
        name: mysql
      spec:
        replicas: 1
        selector:
          app: mysql
        template:
          metadata:
            labels:
              app: mysql
          spec:
            containers:
            - name: mysql
              image: 10.0.0.11:5000/mysql:5.7
              ports:
              - containerPort: 3306
              volumeMounts:
              - name: nfs-vol
                mountPath: /var/lib/mysql
              env:
              - name: MYSQL_ROOT_PASSWORD
                value: "123456"
              - name: MYSQL_DATABASE
                value: "wordpress"
              - name: MYSQL_USER
                value: "wordpress"
              - name: MYSQL_PASSWORD
                value: "wordpress"
            volumes:
            - name: nfs-vol
              persistentVolumeClaim:
                claimName: pvc-mysql
    # kubectl create -f mysql-rc.yaml 
    
    6、创建mysql的svc
    # vim mysql-svc.yaml  
      apiVersion: v1
      kind: Service
      metadata:
        name: mysql
      spec:
        ports:
          - port: 3306
        selector:
          app: mysql
    # kubectl create -f mysql-svc.yaml  
    
    7、获取 MySQL 集群 IP
    # kubectl get svc
    mysql        10.254.69.58     <none>        3306/TCP       28s          
    
    8、创建wordpress的rc
    # vim wp-rc.yaml 
      apiVersion: v1
      kind: ReplicationController
      metadata:
        name: myweb
      spec:
        replicas: 2
        selector:
          app: myweb
        template:
          metadata:
            labels:
              app: myweb
          spec:
            containers:
            - name: myweb
              image: 10.0.0.11:5000/wordpress:latest
              ports:
              - containerPort: 80
              volumeMounts:
              - name: nfs-vol
                mountPath: /var/www/html
              env:
              - name: WORDPRESS_DB_HOST
                value: '10.254.69.58'
              - name: WORDPRESS_DB_USER
                value: 'wordpress'
              - name: WORDPRESS_DB_PASSWORD
                value: 'wordpress'
            volumes:
            - name: nfs-vol
              persistentVolumeClaim:
                claimName: pvc-wp
    # kubectl create -f wp-rc.yaml             
                
    9、创建wordpress的svc
    # vim wp-svc.yaml 
      apiVersion: v1
      kind: Service
      metadata:
        name: myweb
      spec:
        type: NodePort
        ports:
          - port: 80
            nodePort: 30008
        selector:
          app: myweb  
    # kubectl create -f wp-svc.yaml 
    
    10、测试
    浏览器访问
    http://10.0.0.11:30008/
  • 相关阅读:
    mac 快捷键
    mac 配置nginx 虚拟域名(转载)
    StringUtils中 isNotEmpty 和isNotBlank的区别【java字符串判空】
    软件常用版本英文snapshot和ga
    IF条件控制
    函数与方法
    数据类型
    函数 FUNCTION
    集合 SET
    字典 DICTIONARY
  • 原文地址:https://www.cnblogs.com/wuhg/p/13963778.html
Copyright © 2011-2022 走看看