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:"", Minor:"", 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:"", Minor:"", 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"]}

部署注意事项

Docker Kubernetes 环境搭建的更多相关文章

  1. Docker Swarm 环境搭建

    Docker Swarm 环境搭建 swarm 使用前提 1.Docker版本1.12+ Docker升级教程:https://www.cnblogs.com/xiangsikai/p/9935894 ...

  2. 傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建

    主要内容: 1.Docker与Kubernetes的关系 2.SpringBoot微服务的Docker镜像创建 3.Kubernetes本地环境搭建 一.Docker与Kubernetes的关系 在说 ...

  3. 阿里云ECS+CentOS 7.0+Docker+Redmine环境搭建

    前言 搭建Redmine环境可以选择使用分别安装Ruby+Rails+Redmine+MySQL的方式, 但是过程中需要解决各种扰人的依赖问题.Docker为我们提供的Plan B,方便,快捷. 安装 ...

  4. docker compose环境搭建

    概述 Docker Compose提供一个简单的基于YAML配置语言.用于描写叙述和组装多容器的分布式应用. 使用docker定义和执行复杂的应用.使用compose,能够在一个文件中,定义多容器的应 ...

  5. Docker学习-环境搭建

    ChuanGoing 2019-12-15 本篇是DevOps Docker介绍第一篇,首先说下为何另开一篇来讲解本系列. 原因有二: 1.重新复习下个人对于DevOps/Docker的学习之路 2. ...

  6. 二、kubernetes环境搭建

    主要内容 1.环境准备(2主机) 2.安装流程 3.问题分析 4.总结 环境配置(2主机) 系统:CentOS 7.3 x64 网络:局域网(VPC) 主机: master:172.16.0.17 m ...

  7. 三、kubernetes环境搭建(实践)

    一.目前近况 docker 版本 K8S支持 18.06的 二.安装docker #1.配置仓库 sudo yum install -y yum-utils device-mapper-persist ...

  8. kubernetes 环境搭建(ubuntu16.04)

    通过kubeadm安装kubernetes的教程:1: 首先在每台机器上安装: docker(1.12), kubeadm(1.6), kubectl, kubelet, kubernetes-cni ...

  9. Docker LNMP环境搭建

    原文地址:https://www.awaimai.com/2120.html 1 快速使用 2 安装docker和docker-compose 3 使用国内镜像仓库 4 目录说明 4.1 目录结构 4 ...

随机推荐

  1. ORACLE调优深入理解AWR报告(转)

    AWR报告分析可从以下几点入手: (1).Oacle主机资源开销分析及负载情况 (2).oracle top信息分析 Top 10 Foreground Events by Total Wait Ti ...

  2. C# 不安装Oracle客户端情况下,如何连接到Oracle数据库

    简介: 在我们开发应用场景经常碰到需要连接Oracle数据库,这也是相当常见的一种情况.一般.Net环境连接Oracle数据库,可以通过TNS/SQL.NET 配置文件,而 TNS 必须要 Oracl ...

  3. xcode8 iOS函数返回值使用警告

    没有使用返回值时, 警告 swift: @warn_unused_result func doSomething() -> Bool { return true } OC: - (BOOL)do ...

  4. C# StackExchange.Redis 用法总结

    安装 StackExchange.Redis 在 NuGet 中搜索 StackExchange.Redis 和 Newtonsoft.Json,直接点击按钮安装即可. StackExchange.R ...

  5. PCB画板总结

    最近几天完成了第一个PCB电路板.虽然器件不是很多,手动布线了4次才达到自己理想的效果. 但是还是有很多细节只有亲自拿到了自己做的板子,亲自焊接之后,才知道自己哪里不合适. 这是修改了4次之后的最终的 ...

  6. PHP(一般标签介绍,标签特性,实体名称,绝对路径与相对路径)

    h1:为标题  h1~h6 标题会逐渐变小 需更换标签里面的数字 如: <h1>这是标题123</h1>---标题 <h2>这是标题123</h2>-- ...

  7. Centos7 修改系统时区timezone

    Centos7 修改系统时区timezone 注意:修改Linux系统的时区以后,再安装jvm,jvm默认会使用系统的时区.如果系统时区设置错误,安装jvm后,再修改系统的时区,但jvm的时区仍然用不 ...

  8. AJAX方法讲解

    Ajax的方法讲解 Ajax 异步请求,有点: 调高用户的体验度, 降低网络传输量 $.load() //异步加载页面 $.post()  Post 异步请求 $.post("url请求地址 ...

  9. android不知不觉偷拍他人功能实现(手机关闭依然拍照)【申明:来源于网络】

    android不知不觉偷拍他人功能实现(手机关闭依然拍照)[申明:来源于网络] 地址:http://blog.csdn.net/huangxiaoguo1/article/details/536660 ...

  10. python-颜色显示

    格式:\033[显示方式;字体色;背景色m......[\033[0m] ------------------------------------------- 字体色 | 背景色 | 颜色描述 -- ...