zoukankan      html  css  js  c++  java
  • Docker Kubernetes 环境搭建

    Docker Kubernetes 环境搭建

    节点规划

    • 版本
    • 系统:Centos 7.4 x64
    • Docker版本:18.09.0
    • Kubernetes版本:v1.8
    • etcd存储版本:etcd-3.2.22
    • 部署
    • 管理节点:192.168.1.79
    • 安装插件:etcd
    • 安装插件:kube-apiserver
    • 安装插件:kube-controller-manager
    • 安装插件:kube-scheduler
    • 工作节点:192.168.1.78
    • 安装插件:kubelet
    • 安装插件:kube-proxy
    • 安装插件:docker
    • 工作节点:192.168.1.77
    • 安装插件:kubelet
    • 安装插件:kube-proxy
    • 安装插件:docker

    Kubernetes 部署方式

    1、kubeadm工具快捷安装kubernetes集群。kubeadm工具安装会屏蔽很多细节。

    2、通过kubernetes二进制包安装。

    注:这里我采用第2种,由于安装环境繁琐,将事先编译好的Kubernetes工具包来进行环境部署。

    • kubernetes工具包:https://pan.baidu.com/s/1xvAadiCZmxKs22Zpqw3VNQ
    • 密码:pyjq

    1、管理节点:安装etcd存储

    1.1、安装etcd存储

    yum install etcd -y

    1.2、编辑配置文件添加配置参数

    vim /etc/etcd/etcd.conf

    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
    ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379

    1.3、重启服务,添加开机自启动

    systemctl enable etcd
    systemctl restart etcd

    1.4、查看监听端口

    netstat -antp | grep etcd
    tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 15737/etcd
    tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 15737/etcd
    tcp 0 0 127.0.0.1:2379 127.0.0.1:59936 ESTABLISHED 15737/etcd
    tcp 0 0 127.0.0.1:59936 127.0.0.1:2379 ESTABLISHED 15737/etcd 
    输出

     


    2、管理节点:安装kubernetes Master 运行节点组织

    2.1、解压master包加入执行文件

    unzip master.zip;chmod +x *

    2.2、创建目录

    mkdir /opt/kubernetes/{bin,cfg} -p

    2.3、将压缩文件kube移动到bin目录下

    mv kube-apiserver kube-controller-manager kube-scheduler kubectl /opt/kubernetes/bin

    2.4、修改apiserver.sh、controller-manager.sh、scheduler.sh脚本文件

    vim apiserver.sh

    # Mster监听地址IP
    MASTER_ADDRESS=${1:-"192.168.1.79"}
    # ETCD数据库服务地址
    ETCD_SERVERS=${2:-"http://192.168.1.79:2379"}

    vim controller-manager.sh

    # Mster监听地址IP
    MASTER_ADDRESS=${1:-"192.168.1.79"}

    vim scheduler.sh

    # Mster监听地址IP
    MASTER_ADDRESS=${1:-"192.168.1.79"}

    2.5、运行kubernetes启动脚本 masterIP地址默认端口8080 加etcd地址

    ./apiserver.sh 192.168.1.79 http://192.168.1.79:2379
    命令:ps -ef | grep kube
    
    root 16724 1 99 15:47 ? 00:00:02 /opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=http://192.168.1.97:2379 --storage-backend=etcd2 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --kubelet-port=10250 --advertise-address=192.168.1.97 --allow-privileged=false --service-cluster-ip-range=10.10.10.0/24
    查看进程
    命令:journalctl -u kube-apiserver
    
    -- Logs begin at 三 2018-11-07 10:10:28 CST, end at 一 2018-11-12 15:44:12 CST. --
    11月 12 15:39:57 management systemd[1]: Started Kubernetes API Server.
    11月 12 15:39:57 management systemd[1]: Starting Kubernetes API Server...
    11月 12 15:39:57 management kube-apiserver[15964]: Flag --kubelet-port has been deprecated, kubelet-port is deprecated and will be removed.
    11月 12 15:39:57 management kube-apiserver[15964]: I1112 15:39:57.747966 15964 flags.go:52] FLAG: --address="0.0.0.0"
    11月 12 15:39:57 management kube-apiserver[15964]: I1112 15:39:57.748035 15964 flags.go:52] FLAG: --admission-control="[AlwaysAdmit]"
    11月 12 15:39:57 management kube-apiserver[15964]: I1112 15:39:57.748050 15964
    查看启动日志

    2.6、运行scheduler.sh调度脚本 加masterIP地址默认端口8080

    ./scheduler.sh 192.168.1.79
    命令:journalctl -u kube-scheduler
    
    -- Logs begin at 三 2018-11-07 10:10:28 CST, end at 一 2018-11-12 15:50:36 CST. --
    11月 12 15:49:51 management systemd[1]: Starting Kubernetes Scheduler...
    11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010384 16963 flags.go:52] FLAG: --address="0.0.0.0"
    11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010558 16963 flags.go:52] FLAG: --algorithm-provider="DefaultProvider"
    11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010579 16963 flags.go:52] FLAG: --alsologtostderr="false"
    11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010588 16963 flags.go:52] FLAG: --contention-profiling="false"
    11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010651 16963 flags.go:52] FLAG: --kubeconfig=""
    查看日志

    2.7、运行controller-manager.sh管理端控制脚本 加masterIP地址默认端口8080

    ./controller-manager.sh 192.168.1.79
    命令:journalctl -u kube-controller-manager
    
    -- Logs begin at 三 2018-11-07 10:10:28 CST, end at 一 2018-11-12 15:55:57 CST. --
    11月 12 15:52:54 management systemd[1]: Started Kubernetes Controller Manager.
    11月 12 15:52:54 management systemd[1]: Starting Kubernetes Controller Manager...
    11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.296770   17311 flags.go:52] FLAG: --address="0.0.0.0"
    11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.296977   17311 flags.go:52] FLAG: --allocate-node-cidrs="false"
    11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.297001   17311 flags.go:52] FLAG: --allow-untagged-cloud="false"
    11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.297007   17311 flags.go:52] FLAG: --allow-verification-with-non-compliant-keys="false"
    11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.297015   17311 flags.go:52] FLAG: --alsologtostderr="false"
    查看启动日志

    2.8、将kubernetes添加到环境变量,并设置立即生效

    echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
    source /etc/profile

    3、工作节点1与2:kubernetes Node 运行节点组织

    3.1、解压node包并加入执行文件

    unzip node.zip;chmod +x *

    3.2、创建目录

    mkdir -p /opt/kubernetes/{bin,cfg}

    3.3、将压缩文件kube移动到bin目录下

    mv kubelet kube-proxy /opt/kubernetes/bin

    3.4、修改脚本配置文件

    vim kubelet.sh

    # MASTER服务端地址
    MASTER_ADDRESS=${1:-"192.168.1.79"}
    # 本地工作节点地址
    NODE_ADDRESS=${2:-"192.168.1.79"}
    # DNS地址
    DNS_SERVER_IP=${3:-"192.168.1.1"}
    DNS_DOMAIN=${4:-"cluster.local"}
    # 配置文件地址 主要用于连接API服务
    KUBECONFIG_DIR=${KUBECONFIG_DIR:-/opt/kubernetes/cfg}

    3.5、禁用所有的swap分区,不然启动会报错

    swapoff -a

    3.6、启动kubelet.sh管理本机运行容器生命周期服务脚本

    # ./kubelet.sh master地址 本机地址 DNS地址
    ./kubelet.sh 192.168.1.79 192.168.1.78 10.10.10.2
    命令:ps -aux | grep kubelet
    
    root      57592  2.9  0.8 622884 72492 ?        Ssl  16:30   0:01 /opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --address=192.168.1.78  --hostname-override=192.168.1.78 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --allow-privileged=false --cluster-dns=10.10.10.2 --cluster-domain=cluster.local
    root      57708  0.0  0.0 112732  2304 pts/0    S+   16:31   0:00 grep --color=auto kubelet
    查看进程
    命令:journalctl -u kubelet
    
    -- Logs begin at 三 2018-11-07 09:36:45 CST, end at 一 2018-11-12 16:32:28 CST. --
    11月 12 16:20:08 slave02 systemd[1]: Started Kubernetes Kubelet.
    11月 12 16:20:08 slave02 systemd[1]: Starting Kubernetes Kubelet...
    11月 12 16:20:08 slave02 kubelet[57178]: I1112 16:20:08.295744   57178 flags.go:52] FLAG: --address="192.168.1.78"
    11月 12 16:20:08 slave02 kubelet[57178]: I1112 16:20:08.295853   57178 flags.go:52] FLAG: --allow-privileged="false"
    11月 12 16:20:08 slave02 kubelet[57178]: I1112 16:20:08.295887   57178 flags.go:52] FLAG: --alsologtostderr="false"
    11月 12 16:20:08 slave02 kubelet[57178]: I1112 16:20:08.295899   57178 flags.go:52] FLAG: --anonymous-auth="true"
    查看日志
    命令:netstat -antp | grep 10250
    
    tcp        0      0 192.168.1.78:10250      0.0.0.0:*               LISTEN      57592/kubelet  
    查看监听端口

    3.7、启动网络代理proxy.sh脚本

    # ./proxy.sh Master地址 本地地址
    ./proxy.sh 192.168.1.79 192.168.1.78
    命令:journalctl -u kube-proxy
    
    -- Logs begin at 三 2018-11-07 09:36:45 CST, end at 一 2018-11-12 16:36:30 CST. --
    11月 12 16:34:39 slave02 systemd[1]: Started Kubernetes Proxy.
    11月 12 16:34:39 slave02 systemd[1]: Starting Kubernetes Proxy...
    11月 12 16:34:39 slave02 kube-proxy[57883]: W1112 16:34:39.787713   57883 server.go:191] WARNING: all flags other than --config, --write-config-to, and --cleanup are deprecated. Please begi
    11月 12 16:34:39 slave02 kube-proxy[57883]: W1112 16:34:39.801807   57883 server_others.go:263] Flag proxy-mode="" unknown, assuming iptables proxy
    11月 12 16:34:39 slave02 kube-proxy[57883]: I1112 16:34:39.804394   57883 server_others.go:117] Using iptables Proxier.
    11月 12 16:34:39 slave02 kube-proxy[57883]: W1112 16:34:39.805553   57883 server.go:580] Failed to retrieve node info: Get 
    查看日志

    4、管理节点:测试查看集群节点是否加入

    查看节点加入信息

    kubectl get node
    NAME STATUS ROLES AGE VERSION
    192.168.1.77 Ready <none> 5m v1.8.0
    192.168.1.78 Ready <none> 5m v1.8.0

    查看组件运行状态

    kubectl get componentstatus
    NAME STATUS MESSAGE ERROR
    scheduler Healthy ok
    controller-manager Healthy ok
    etcd-0 Healthy {"health": "true"}

    查看服务版本

    kubectl version
    Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:57:57Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:46:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
    版本信息
    该配置文件通过下边官方配置文件后进行的修改:
    kubernetes二进制包:
    /kubernetes/cluster/centos/master/scripts/apiserver.sh
    注:启动脚本将二进制命令交给系统
    注:systemd管理服务启动后由systemd管理,都设置了开机启动。
    注:标签默认指定名称生成。
    扩展1:
    一、kubelet再创建pod时会先下载一个pause镜像,这个镜像用于容器基础网络管理,但这个镜像仓库。(gcr.io/google_containers/pause-amd64:3.0)是国外的,不能顺利下载。
    
    解决办法:
    # 国内下载pause镜像
    docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
    # tag是kubernetes默认的仓库和版本好地址。
    docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0
    
    或者
    
    # 指定镜像仓库位置
    --pod-infra-container-image=registry.cn-hangzhou.zliyuncs.com/google-containers/pause-amd64.3.0
    再或者翻墙
    
    二、Docker默认镜像仓库是Docker Hub,可能会下载速度慢或者超时。
    
    改善方法:
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://04be47cf.m.daocloud.io
    
    # 1、下载国内的pause镜像
    docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
    
    # 2、设置tag默认的仓库和版本好地址。
    docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0
    
    # 工作节点:查看docker镜像
    docker images
    registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64   3.0                 99e59f495ffa        2 years ago         747kB
    
    3、工作节点:部署国内镜像
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://04be47cf.m.daocloud.io
    
    4、重启镜像
    systemctl restart docker 
    
    5、查看切换地址
    cat /etc/docker/daemon.json 
    {"registry-mirrors": ["http://04be47cf.m.daocloud.io"]}
    部署注意事项
  • 相关阅读:
    CXF学习(2) helloworld
    foreach与Iterable学习
    java基础之JDBC八:Druid连接池的使用
    java基础之JDBC七:C3P0连接池的使用
    java基础之JDBC六:DBCP 数据库连接池简介
    java基础之JDBC五:批处理简单示例
    java基础之JDBC四:事务简单示例
    java基础之JDBC三:简单工具类的提取及应用
    java基础之JDBC二:原生代码基础应用
    java基础之JDBC一:概述及步骤详解
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/9995800.html
Copyright © 2011-2022 走看看