zoukankan      html  css  js  c++  java
  • Kubernetes搭建

    Kubernetes概述

    请参考新文档介绍:http://docs.kubernetes.org.cn/227.html

    环境准备

    • node1.tedu.cn 192.168.4.1/24,必须配网关,如果没有配置网关k8s无法启动。
    • 将安装包拷贝到node1

    安装

    [root@node1 ~]# cd k8s_pkgs/
    [root@node1 k8s_pkgs]# yum remove -y python-rhsm
    [root@node1 k8s_pkgs]# yum install -y *
    

    配置

    [root@node1 k8s_pkgs]# vim /etc/sysconfig/docker
    OPTIONS='--selinux-enabled=False --log-driver=journald --signature-verification=false'
    [root@node1 k8s_pkgs]# vim /etc/docker/daemon.json 
    {
      "insecure-registries" : ["192.168.4.254:5000"]
    }
    [root@node1 k8s_pkgs]# vim /etc/kubernetes/apiserver
    把ServiceAccount从--admission-control删掉
    [root@node1 k8s_pkgs]# vim /etc/kubernetes/kubelet 
    KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.4.254:5000/pod-infrastructure"
    

    启服务

    # master的组件
    [root@node1 k8s_pkgs]# systemctl start etcd
    [root@node1 k8s_pkgs]# systemctl enable etcd
    [root@node1 k8s_pkgs]# systemctl start kube-apiserver
    [root@node1 k8s_pkgs]# systemctl enable kube-apiserver
    [root@node1 k8s_pkgs]# systemctl start kube-controller-manager
    [root@node1 k8s_pkgs]# systemctl enable kube-controller-manager
    [root@node1 k8s_pkgs]# systemctl start kube-scheduler
    [root@node1 k8s_pkgs]# systemctl enable kube-scheduler
    # node的组件
    [root@node1 k8s_pkgs]# systemctl start docker
    [root@node1 k8s_pkgs]# systemctl enable docker
    [root@node1 k8s_pkgs]# systemctl start kubelet
    [root@node1 k8s_pkgs]# systemctl enable kubelet
    [root@node1 k8s_pkgs]# systemctl start kube-proxy
    [root@node1 k8s_pkgs]# systemctl enable kube-proxy
    

    tomcat+mysql

    # 创建mysql的rc声明文件
    [root@node1 tomcat_mysql]# vim mysql-rc.yaml 
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: mysql
    spec:
      replicas: 1   # 要求标签是app:mysql的pod数目是1
      selector:     # 选择器,查找标签是app:mysql的pod
        app: mysql
      template:     # 如果pod的数目不达标,创建满足以下条件的pod
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - name: mysql
            image: 192.168.4.254:5000/mysql
            ports:
            - containerPort: 3306
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
    # 现在系统中没有rc / pod / 容器 / 镜像
    [root@node1 tomcat_mysql]# kubectl get rc
    [root@node1 tomcat_mysql]# kubectl get pod
    [root@node1 tomcat_mysql]# docker ps
    [root@node1 tomcat_mysql]# docker images
    # 根据ymal文件创建相关资源
    [root@node1 tomcat_mysql]# kubectl create -f mysql-rc.yaml  
    [root@node1 tomcat_mysql]# kubectl get rc
    [root@node1 tomcat_mysql]# kubectl get pod
    [root@node1 tomcat_mysql]# docker images
    [root@node1 tomcat_mysql]# docker ps
    # 查看到pod名称后,获取它的详细信息
    [root@node1 tomcat_mysql]# kubectl describe pod mysql-9vj45
    
    # 创建服务
    [root@node1 tomcat_mysql]# vim mysql-svc.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
    spec:
      ports:
        - port: 3306
      selector:
        app: mysql
    [root@node1 tomcat_mysql]# kubectl get service
    [root@node1 tomcat_mysql]# kubectl create -f mysql-svc.yaml 
    [root@node1 tomcat_mysql]# kubectl get service
    # mysql服务没有EXTERNAL IP,因为用户不直接访问mysql,而是访问web服务
    
    # 创建web服务
    [root@node1 tomcat_mysql]# vim myweb-rc.yaml 
    kind: ReplicationController
    metadata:
      name: myweb
    spec:
      replicas: 5
      selector:
        app: myweb
      template:
        metadata:
          labels:
            app: myweb
        spec:
          containers:
            - name: myweb
              image: 192.168.4.254:5000/tomcat-app
              ports:
              - containerPort: 8080
              env:
              - name: MYSQL_SERVICE_HOST
                value: 'mysql'
              - name: MYSQL_SERVICE_PORT
                value: '3306'
    [root@node1 tomcat_mysql]# kubectl create -f myweb-rc.yaml
    [root@node1 tomcat_mysql]# kubectl get rc
    [root@node1 tomcat_mysql]# kubectl get pod
    [root@node1 tomcat_mysql]# docker ps
    # myweb将起动10个容器,因为每个pod中需要有一个架构容器,还需要有一个工作容器
    [root@node1 tomcat_mysql]# vim myweb-svc.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: myweb
    spec:
      type: NodePort
      ports:
        - port: 8080
          nodePort: 30001
      selector:
        app: myweb
    # 访问node的300001,将会映射到pod的8080
    [root@node1 tomcat_mysql]# kubectl create -f myweb-svc.yaml 
    [root@node1 tomcat_mysql]# kubectl get service
    
    # 访问 http://node_ip:30001
    
    # 如果需要动态调整pod数目,只是将rc改个数字即可
    [root@node1 tomcat_mysql]# kubectl scale --replicas=3 replicationcontroller myweb 
    [root@node1 tomcat_mysql]# kubectl get rc
    [root@node1 tomcat_mysql]# kubectl get pod
    

    删除

    [root@node1 tomcat_mysql]# kubectl delete service myweb
    [root@node1 tomcat_mysql]# kubectl delete service mysql
    [root@node1 tomcat_mysql]# kubectl delete rc myweb 
    [root@node1 tomcat_mysql]# kubectl delete rc mysql 
    

    php+redis主从

    # redis-master
    [root@node1 php_redis]# vim redis-master-controller.yaml 
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: redis-master
      labels:
        name: redis-master
    spec:
      replicas: 1
      selector:
        name: redis-master
      template:
        metadata:
          labels:
            name: redis-master
        spec:
          containers:
          - name: master
            image: 192.168.4.254:5000/redis-master
            ports:
            - containerPort: 6379
    [root@node1 php_redis]# kubectl create -f redis-master-controller.yaml
    [root@node1 php_redis]# vim redis-master-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-master
      labels:
        name: redis-master
    spec:
      ports:
      - port: 6379
        targetPort: 6379
      selector:
        name: redis-master
    [root@node1 php_redis]# kubectl create -f redis-master-service.yaml 
    
    # redis-slave
    [root@node1 php_redis]# vim redis-slave-controller.yaml 
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: redis-slave
      labels:
        name: redis-slave
    spec:
      replicas: 2
      selector:
        name: redis-slave
      template:
        metadata:
          labels:
            name: redis-slave
        spec:
          containers:
          - name: slave
            image: 192.168.4.254:5000/guestbook-redis-slave
            env:
            - name: GET_HOSTS_FORM
              value: env
            ports:
            - containerPort: 6379
    [root@node1 php_redis]# kubectl create -f redis-slave-controller.yaml
    [root@node1 php_redis]# vim redis-slave-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-slave
      labels:
        name: redis-slave
    spec:
      ports:
      - port: 6379
      selector:
        name: redis-slave
    [root@node1 php_redis]# kubectl create -f redis-slave-service.yaml
    
    # php
    [root@node1 php_redis]# vim frontend-controller.yaml 
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: frontend
      labels:
        name: frontend
    spec:
      replicas: 3
      selector:
        name: frontend
      template:
        metadata:
          labels:
            name: frontend
        spec:
          containers:
          - name: frontend
            image: 192.168.4.254:5000/guestbook-php-frontend
            env:
            - name: GET_HOSTS_FROM
              value: env
            ports:
              - containerPort: 80
    [root@node1 php_redis]# kubectl create -f frontend-controller.yaml
    [root@node1 php_redis]# vim frontend-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: frontend
      labels:
        name: frontend
    spec:
      type: NodePort
      ports:
      - port: 80
        nodePort: 30001
      selector:
        name: frontend
    [root@node1 php_redis]# kubectl create -f frontend-service.yaml
    # 访问宿主机http://宿主机IP:30001
    
  • 相关阅读:
    java编程题古典算法之兔子问题
    java基础之final关键字
    java基础之final关键字
    java基础之静态代码块,局部代码块,构造代码块区别。
    java基础之静态代码块,局部代码块,构造代码块区别。
    java基础之完数判断
    java基础之完数判断
    java基础之二维数组不定义列数
    正则表达式快速入门
    深入理解JSON对象
  • 原文地址:https://www.cnblogs.com/xujint/p/13621499.html
Copyright © 2011-2022 走看看