kubernetes 集群部署
kubernetes 集群部署
环境
JiaoJiao_Centos7-1(152.112) 192.168.152.112
JiaoJiao_Centos7-2(152.113) 192.168.152.113
JiaoJiao_Centos7-3(152.114) 192.168.152.114
已开通 4C+8G+80G
集群规划
部署方式
环境准备:基于主机名称通信,时间同步,关闭firewall和iptables.service
方式一:yum ,rpm 安装。复杂。
1. etcd cluster :安装在master节点上2. flannel:安装在所有节点上
2. 安装配置master
kube-apiserver,kube-scheduler,kube-controller-manager
3. 安装配置node
kube-proxy
kubelet
方式二:使用kubeadm工具安装。简单。
1. master和node 都用yum 安装kubelet,kubeadm,docker
2. master 上初始化:kubeadm init
3. master 上启动一个flannel的pod
4. node上加入集群:kubeadm join
部署步骤
采取方式二:使用kubeadm工具安装步骤
准备环境
修改主机名(3台机器都需要修改)
# hostnamectl set-hostname master
配置hosts和dns解析(3台机器都需要配置)
[root@node02 ~]# cat /etc/hosts
127.0.0.1 node02 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: node02 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.152.112 master
192.168.152.113 node01
192.168.152.114 node02
默认的dns服务器没法解析到opsx.alibaba.com和mirrors.aliyun.com,使用nameserver 192.168.?.?(具体根据你所在公司环境设置)这个可以。
[root@master ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.?.?
关闭防火墙和iptables,检查iptables配置值是否为1(3台机器都需要)
# systemctl stop firewalld.service
# systemctl stop iptables.service
# systemctl disable firewalld.service
[root@master docker]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables [root@master docker]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
配置docker yum源
#yum update
#yum install -y yum-utils device-mapper-persistent-data lvm2 wget
#cd /etc/yum.repos.d
#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
配置kubernetes yum 源
#wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# rpm --import rpm-package-key.gpg
# rpm --import yum-key.gpg
[root@master yum.repos.d]# cat kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=
# yum repolist
master和node 安装kubelet,kubeadm,docker
# yum install docker-ce kubelet kubeadm
master 上安装kubectl ,node节点可以选择安装或者不安装
kubectl 是API server 客户端程序,通过连接master端的API server来实现k8s对象资源的增删改查等基本操作。
#yum install kubectl
docker的配置
配置私有仓库和镜像加速地址
[root@master docker]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://295c6a59.m.daocloud.io"],
"insecure-registries":["自己搭建的私有仓库地址"]}
设置代理
[root@master docker]# cat /usr/lib/systemd/system/docker.service |grep -v "^#"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=
RestartSec=
Restart=always
#设置代理地址,和不让代理的地址
Environment="HTTPS_PROXY=http://www.ik8s.io:10080" "NO_PROXY=localhost,127.0.0.1,192.168.152.0/24"
StartLimitBurst=
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
启动docker
# systemctl daemon-reload
# systemctl start docker
[root@master docker]# docker info
Containers:
Running:
Paused:
Stopped:
Images:
Server Version: 18.09.
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.-.el7.x86_64
Operating System: CentOS Linux (Core)
OSType: linux
Architecture: x86_64
CPUs:
Total Memory: .64GiB
Name: master
ID: KEBQ:4XXU:LTA7:J5QH:HK4F:JS26:RKI4:YFPJ:RY45:Q647:SJI6:VZDQ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
HTTPS Proxy: http://www.ik8s.io:10080 #代理地址
No Proxy: localhost,127.0.0.1,192.168.152.0/
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
XXXXX #本公司私有库地址
127.0.0.0/
Registry Mirrors:
http://295c6a59.m.daocloud.io/ #镜像加速地址
Live Restore Enabled: false
Product License: Community Engine
# systemctl enable docker
master 上初始化:kubeadm init
修改配置文件,忽略swap报错
[root@master docker]# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
初始化
#kubeadm init [command] --help 可以先查看下帮助
# kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.244.0.0/ --service-cidr=10.96.0.0/ --ignore-preflight-errors=Swap --kubernetes-version=v1. # k8s的版本
版本通过:https://github.com/kubernetes/kubernetes/releases 来确定你需要的版本。
--pod-network-cidr=10.244.0.0/ #pod网络。flannel 的默认是10.244.0./
--service-cidr=10.96.0.0/ # service 网络,也是用了默认值
--ignore-preflight-errors=Swap #忽略Swap报错 [root@master ~]# kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.244.0.0/ --service-cidr=10.96.0.0/ --ignore-preflight-errors=Swap
[init] Using Kubernetes version: v1.14.2
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING Swap]: running with swap on is not supported. Please disable swap
[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.14.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.14.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.14.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status
报错了。拉不到镜像。
解决办法:docker.io仓库对google的容器做了镜像,可以通过下列命令下拉取相关镜像
#docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2
#docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2
#docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2
#docker pull mirrorgooglecontainers/kube-proxy:v1.14.2
#docker pull mirrorgooglecontainers/pause:3.1
#docker pull mirrorgooglecontainers/etcd:3.3.
#docker pull coredns/coredns:1.3.
通过docker tag命令来修改镜像的标签:
# docker tag mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
# docker tag mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
# docker tag mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2
# docker tag mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
# docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
# docker tag mirrorgooglecontainers/etcd:3.3. k8s.gcr.io/etcd:3.3.
# docker tag coredns/coredns:1.3. k8s.gcr.io/coredns:1.3.
初始化过程中有提示,请按照提示进行操作并且将下面内容保存下来。
kubeadm join 192.168.152.112: --token qlu35g.rfxl6k8mvry8nxfp \
> --discovery-token-ca-cert-hash sha256:8febc1b1402b471187e55186b4c3937ac23cfe830fb6ccfbd2e9f212e011218d
部署网络:master 上启动一个flannel的pod
下载镜像。由于不能直接下载官方镜像,自己百度找了个地址:
#docker pull jmgao1983/flannel:v0.11.0-amd64
#docker tag jmgao1983/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
#docker rmi jmgao1983/flannel:v0.11.0-amd64
启动:
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
检查下:
[root@master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-fb8b8dccf-f7db6 / Running 53m
coredns-fb8b8dccf-sd8hk / Running 53m
etcd-master / Running 52m
kube-apiserver-master / Running 52m
kube-controller-manager-master / Running 52m
kube-flannel-ds-amd64-zq5zr / Running 19m
kube-proxy-8mtbc / Running 53m
kube-scheduler-master / Running 52m
到此,master 就安装好了! 保存镜像
docker save -o master.tar k8s.gcr.io/kube-proxy:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2 quay.io/coreos/flannel:v0.11.0-amd64 k8s.gcr.io/coredns:1.3. k8s.gcr.io/etcd:3.3. k8s.gcr.io/pause:3.1
node节点加入集群
将master上保存的镜像同步到节点上
[root@master ~]#scp master.tar node01:/root/
[root@master ~]#scp master.tar node02:/root/
将镜像导入本地
[root@node01 ~]# docker load< master.tar
修改配置,忽略报错:
[root@node01 docker]# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
执行加入集群命令
[root@node01 ~]# kubeadm join 192.168.152.112: --token qlu35g.rfxl6k8mvry8nxfp --discovery-token-ca-cert-hash sha256:8febc1b1402b471187e55186b4c3937ac23cfe830fb6ccfbd2e9f212e011218d --ignore-preflight-errors=Swap
在master上查看节点情况
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 107m v1.14.2
node01 Ready <none> 23m v1.14.2
node02 Ready <none> 23m v1.14.2
kubernetes 集群部署的更多相关文章
- kubernetes集群部署
鉴于Docker如此火爆,Google推出kubernetes管理docker集群,不少人估计会进行尝试.kubernetes得到了很多大公司的支持,kubernetes集群部署工具也集成了gce,c ...
- Kubernetes集群部署关键知识总结
Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备 ...
- 基于Kubernetes集群部署skyDNS服务
目录贴:Kubernetes学习系列 在之前几篇文章的基础,(Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard.为Kubernetes集群部署本地镜像仓库 ...
- 为Kubernetes集群部署本地镜像仓库
目录贴:Kubernetes学习系列 经过之前两篇文章:Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard,我们基本上已经能够在k8s的集群上部署一个应用了 ...
- Kubernetes 集群部署(2) -- Etcd 集群
Kubenetes 集群部署规划: 192.168.137.81 Master 192.168.137.82 Node 192.168.137.83 Node 以下在 Master 节点操作. ...
- Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目
在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...
- Docker学习-Kubernetes - 集群部署
Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...
- linux运维、架构之路-Kubernetes集群部署
一.kubernetes介绍 Kubernetes简称K8s,它是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部 ...
- Kubernetes集群部署DNS插件
准备 kube-dns 相关镜像 准备 kube-dns 相关 yaml 文件 系统预定义的 RoleBinding 配置 kube-dns 相关服务 检查 kube-dns 功能 kube-dns ...
随机推荐
- Python高级核心技术97讲 ☝☝☝
Python高级核心技术97讲 ☝☝☝ Python高级核心技术97讲 系列教程 学习 教程 Python的标准整数类型是最通用的数字类型.在大多数32位机器上,标准整数类型的取值范围是-2**31 ...
- 基于常规DNS隧道进行的tcp端口转发dns2tcp的使用
0x01 安装Dns2TCP dns2tcp 是一个利用DNS隧道转发TCP连接的工具,使用C语言开发. sudo apt-get install dns2tcp 0x02配置dns2tcp 配置DN ...
- [Luogu4550] 收集邮票
题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所 ...
- C++中哪些函数不能声明为inline?
inline关键字仅仅是对编译器的建议,编译器有权力决定一个函数是否在调用处嵌入.因为内联函数要在调用处展开,编译器必须能在每一个调用处能看到该函数的定义,因此最好将函数实现放在头文件中(而且实现在类 ...
- C语言1博客作业03
这个作业属于哪个课程 C语言程序设计1 这个作业要求在哪里 (https://edu.cnblogs.com) 我在这个课程的目标是 掌握函数运算 我在这个作业哪个具体方面帮助实现目标 编译一些基本生 ...
- MyBatis之启动分析(一)
前言 MyBatis 作为目前最常用的持久层框架之一,分析其源码,对我们的使用过程中可更好的运用它.本系列基于mybatis-3.4.6进行分析. MyBatis 的初始化工作就是解析主配置文件,映射 ...
- 百万年薪python之路 -- 文件操作练习
1.有如下文件,a1.txt,里面的内容为: 老男孩是最好的学校, 全心全意为学生服务, 只为学生未来,不为牟利. 我说的都是真的.哈哈 分别完成以下的功能: a,将原文件全部读出来并打印. with ...
- electron打包分发
原始的方式打包 下载对应的版本号的Release Electron 然后把对应的项目方便整理成这样的目录结构(Windows下) node_modules重新安装,不然可能启动失败 把整文件夹给别人就 ...
- Java接口统一样式返回模板
Java接口统一样式返回模板 背景 在进行接口开发时,一般需要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其他人进行接口之间的联调时不会显得很杂乱无章.而这种固定的 ...
- React-Native转小程序调研报告:Taro & Alita
一. 我们的要求 期望的要求 基于React语法,将RN项目转化为小程序项目 该小程序能同时在 微信小程序 和 支付宝小程序这两个平台运行 底线要求 底线是能转成微信小程序,因为目前来说,因为微信先发 ...
