kubernetes集群部署

kubernetes集群部署
一、系统要求Centos7.2
二、需求三台服务器
    192.168.1.151
    192.168.1.152
    192.168.1.153
三、etcd集群部署
    1、三台服务器都需修改/etc/hosts主机名
        192.168.1.151 k8s-master etcd1
        192.168.1.152 k8s-node1 etcd2
        192.168.1.153 k8s-node2 etcd3
    2、三台服务器都需修改服务器主机名
        hostnamectl --static set-hostname  k8s-master
        hostnamectl --static set-hostname  k8s-node-1
        hostnamectl --static set-hostname  k8s-node-2
    3、三台服务器都需确保时间同步 
        ntpdate -u cn.pool.ntp.org
    4、三台服务器都需安装etcd服务
        yum -y install etcd
    5、192.168.1.151 修改etcd.conf配置文件
        #[Member]
        #ETCD_CORS=""
        ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  --数据存放位置
        #ETCD_WAL_DIR=""
        ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" -- 监听其他 Etcd 实例的地址
        ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001" -- 监听客户端地址
        #ETCD_MAX_SNAPSHOTS="5"
        #ETCD_MAX_WALS="5"
        ETCD_NAME="etcd1"
        #ETCD_SNAPSHOT_COUNT="100000"
        #ETCD_HEARTBEAT_INTERVAL="100"
        #ETCD_ELECTION_TIMEOUT="1000"
        #ETCD_QUOTA_BACKEND_BYTES="0"
        #ETCD_MAX_REQUEST_BYTES="1572864"
        #ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
        #ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
        #ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
        #
        #[Clustering]
        ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.151:2380" -- 通知其他 Etcd 实例地址
        ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.151:2379,http://192.168.1.151:4001" -- 通知客户端地址
        #ETCD_DISCOVERY=""
        #ETCD_DISCOVERY_FALLBACK="proxy"
        #ETCD_DISCOVERY_PROXY=""
        #ETCD_DISCOVERY_SRV=""
        ETCD_INITIAL_CLUSTER="etcd1=http://192.168.1.151:2380,etcd2=http://192.168.1.152:2380,etcd3=http://192.168.1.153:2380" -- 初始化集群内节点地址
        ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" --  初始化集群 token
        ETCD_INITIAL_CLUSTER_STATE="new" -- 初始化集群状态,new 表示新建
        #ETCD_STRICT_RECONFIG_CHECK="true"
        #ETCD_ENABLE_V2="true"
        #
        #[Proxy]
        #ETCD_PROXY="off"
        #ETCD_PROXY_FAILURE_WAIT="5000"
        #ETCD_PROXY_REFRESH_INTERVAL="30000"
        #ETCD_PROXY_DIAL_TIMEOUT="1000"
        #ETCD_PROXY_WRITE_TIMEOUT="5000"
        #ETCD_PROXY_READ_TIMEOUT="0"
        #
        #[Security]
        #ETCD_CERT_FILE=""
        #ETCD_KEY_FILE=""
    6、192.168.1.152 192.168.1.153修改etcd.conf配置文件
        配置与192.168.1.151相同
        只需将相应的ip地址及hostname修改为本机地址即可
        ETCD_NAME="etcd1"
        ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.151:2380"
        ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.151:2379,http://192.168.1.151:4001"
    7、启动服务并查看集群状态
        systmectl start etcd.service
        etcdctl member list && etcdctl cluster-health
四、Kubernetes集群部署
    1、192.168.1.151 Kubernetes-master安装部署
        - yum -y install kubernetes-master flannel -- 安装服务
        - vim /etc/kubernetes/apiserver -- 修改apiserver文件
        ###
        # kubernetes system config
        #
        # The following values are used to configure the kube-apiserver
        #

        # The address on the local server to listen to.
        KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

        # The port on the local server to listen on.
        KUBE_API_PORT="--port=8080"

        # Port minions listen on
        # KUBELET_PORT="--kubelet-port=10250"

        # Comma separated list of nodes in the etcd cluster
        KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.151:2379,http://192.168.1.152:2379,http://192.168.1.153:2379"

        # Address range to use for services
        KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

        # default admission control policies
        #KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
        KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

        # Add your own!
        KUBE_API_ARGS=""
        
        - 启动服务
        systemctl start kube-apiserver
        systemctl start kube-controller-manager
        systemctl start kube-scheduler
    2、192.168.1.152 192.168.1.153 Kubernetes-node安装部署
        - yum -y install Kubernetes-node docker flannel 
        - vim /etc/kubernetes/config -- 修改config配置文件
        ###
        # kubernetes system config
        #
        # The following values are used to configure various aspects of all
        # kubernetes services, including
        #
        #   kube-apiserver.service
        #   kube-controller-manager.service
        #   kube-scheduler.service
        #   kubelet.service
        #   kube-proxy.service
        # logging to stderr means we get it in the systemd journal
        KUBE_LOGTOSTDERR="--logtostderr=true"

        # journal message level, 0 is debug
        KUBE_LOG_LEVEL="--v=0"

        # Should this cluster be allowed to run privileged docker containers
        KUBE_ALLOW_PRIV="--allow-privileged=false"

        # How the controller-manager, scheduler, and proxy find the apiserver
        KUBE_MASTER="--master=http://192.168.1.151:8080"
        - vim /etc/kubernetes/kubelet -- 修改kubelet配置文件
        ###
        # kubernetes kubelet (minion) config

        # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
        KUBELET_ADDRESS="--address=127.0.0.1"

        # The port for the info server to serve on
        # KUBELET_PORT="--port=10250"

        # You may leave this blank to use the actual hostname
        KUBELET_HOSTNAME="--hostname-override=192.168.1.152"

        # location of the api-server
        KUBELET_API_SERVER="--api-servers=http://192.168.1.151:8080"

        # pod infrastructure container
        KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

        # Add your own!
        KUBELET_ARGS=""
        - 启动服务
        systemctl start docker.service
        systemctl start kubelet.service
        systemctl start kube-proxy.service
    3、查看集群部署信息
        kubectl get nodes
五、网络配置
    1、三台服务器都需修改
        - vim /etc/sysconfig/flanneld
        #Flanneld configuration options  
        # etcd url location.  Point this to the server where etcd runs
        FLANNEL_ETCD_ENDPOINTS="http://192.168.1.151:2379"

        # etcd config key.  This is the configuration key that flannel queries
        # For address range assignment
        FLANNEL_ETCD_PREFIX="/atomic.io/network"

        # Any additional options that you want to pass
        #FLANNEL_OPTIONS=""
    2、启动flannel服务 #注意重启flannel服务需要重启docker及kubelet.service、kube-proxy.service服务
    systemctl start flanneld.service 
        k8s-master
        #!/bin/bash
        ser_name=(flanneld etcd kube-apiserver kube-controller-manager kube-scheduler)
        for i in ${ser_name[@]}
        do 
            systemctl restart $i.service
        done
    
        k8s-node重启脚本
        #!/bin/bash
        ser_name=(flanneld etcd docker kubelet kube-proxy)
        for i in ${ser_name[@]}
        do
            systemctl restart $i.service
        done

六、注意事项
    1、如果K8s-Master集群启动时flannel无法实现Pod内部跨主机通信,请执行以下命令并重启k8s-node所有服务
        iptables -P INPUT ACCEPT
        iptables -P FORWARD ACCEPT
        iptables -F
        iptables -L -n
    2、如果执行kubctl create -f xxxx.yaml时Pod状态一直处于ContainerCreating,一下操作需要在k8s-node上执行
        - 查看kubectl describe pod httpd-deployment错误信息,其中最主要的问题是:details: (open/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file ordirectory)
        - 查看/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt(该链接就是上图中的说明) 是一个软链接,但是链接过去后并没有真实的/etc/rhsm,所以需要使用yum安装
            yum -y install *rhsm* 安装完成后,执行一下docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
            如果依然报错,可参考下面的方案
            - wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
            - rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
            - 这两个命令会生成/etc/rhsm/ca/redhat-uep.pem文件
            - 执行docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
            Trying to pull repositoryregistry.access.redhat.com/rhel7/pod-infrastructure ...
            latest: Pulling fromregistry.access.redhat.com/rhel7/pod-infrastructure
            26e5ed6899db: Pull complete
            66dbe984a319: Pull complete
            9138e7863e08: Pull complete
            Digest:sha256:92d43c37297da3ab187fc2b9e9ebfb243c1110d446c783ae1b989088495db931
            Status: Downloaded newer image forregistry.access.redhat.com/rhel7/pod-infrastructure:latest
        - 如果pull成功后docker images查看,如果有registry.access.redhat.com/rhel7/pod-infrastructure则再次执行执行
            kubctl create -f xxxx.yaml 
            kubectl get pods -- 查看正常
        - 简单yaml文件实现启动httpd测试
          - vim deployment.yaml
            apiVersion: v1
            kind: ReplicationController
            metadata:
              name: httpd-deployment
            spec:
              replicas: 2
              template:
                metadata:
                  labels:
                    app: httpd-deployment
                spec:
                  containers:
                  - name: httpd
                    image: httpd:0.1
                    ports:
                    - containerPort: 80
                      hostPort: 80

            
            
            
        
        
        
        
        
    

 

posted @ 2018-07-17 11:23  张祺  阅读(119)  评论(0)    收藏  举报