参照了网上N多文档,不一一列表,共享精神永存!!!!

==================================================

获取所有安装包

安装包分为两类,rpm安装包和docker镜像

rpm安装包

rpm为以下四个

kubeadm-1.7.0-0.x86_64.rpm
kubectl-1.7.0-0.x86_64.rpm
kubelet-1.7.0-0.x86_64.rpm
kubernetes-cni-0.5.1-0.x86_64.rpm

A, 从github上clone以下项目:

https://github.com/kubernetes/release

B,进入rpm目录,执行docker-build.sh脚本,会在output目录下生成那4个rpm安装包。

*如果只生成amd-64的包,修改一下脚本,把其它几个构架的去掉。

*这些安装包的生成,需要fedora:24镜像,最好提前准备。

核心docker镜像

A, 下载kubernetes
1.7.0 release软件包kubernetes-server-linux-amd64.tar.gz

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md

B, 解压kubernetes-server-linux-amd64.tar.gz文件,在server/bin目录下,以下几个文件为kubernetes的核心docker镜像:

kube-apiserver.tar

kube-controller-manager.tar

kube-scheduler.tar

kube-proxy.tar

kube-aggregator.tar

将这些镜像导入harbor仓库便以后备用。

*因为k8s的官方镜像都放在google上,不FQ一般不能直接下载,附录会写一个如何结合github,dockerhub,daocloud来获取指定镜像的办法。

扩展docker镜像

扩展的docker镜像,涉及etcd,flannel,traefik,nginx,tomcat等,后面结合场景写清楚。

所有节点初始化

主要是确认服务器的各项系统指标满足安装kubernetes的要求。

*RedHat发行版本为: 7.3 (Maipo)

*Linux内核版本为:3.10.0-514.el7.x86_64

docker安装

这个安装我们没有涉及,原本已安装好,版本为17.05.0-ce, build 89658be

注意新增/etc/systemd/system/docker.service.d/docker.conf文件:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd  --graph=/dockerVolume  --storage-driver=overlay --insecure-registry habor-ip-address

它改写了docker的存储目录,且定义了harbor仓库地址。

禁用selinux

确认/usr/sbin/sestatus命令输出为:disabled

禁用ipv6

确认以下两条命令均无显示

lsmod | grep -i ipv6

ifconfig | grep -i inet6

开启路由转发

echo 1 > /proc/sys/net/ipv4/ip_forward

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

Iptables清空及禁用

iptables -X

iptables -Z

iptables -P INPUT ACCEPT

iptables -F

*默认禁用,通过硬防来控制规则。

主节点安装

上传rpm文件

将所有涉及的rpm包上传到服务器的一个安装目录(e.g:/root/k8s/)

上传docker镜像

将前节提到的docker images上传到harbor仓库(harbor-ip-address)

运行初始化前脚本

生成并运行以下脚本,进行master初始化前安装。(k8s-master-setup_before.sh)

#!/bin/bash

HARBORPRE="1.2.3.4/kubernets/"
DOCKERS=(
    ${HARBORPRE}/gcr.io/google_containers/k8s-dns-sidecar-amd64:
    ${HARBORPRE}/gcr.io/google_containers/k8s-dns-kube-dns-amd64:
    ${HARBORPRE}/gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:
    ${HARBORPRE}/gcr.io/google_containers/pause-amd64:3.0
    ${HARBORPRE}/quay.io/coreos/flannel-amd64:v0.8.0
    ${HARBORPRE}/gcr.io/google_containers/etcd-amd64:
    ${HARBORPRE}/gcr.io/google_containers/kube-proxy-amd64:v1.7.0
    ${HARBORPRE}/gcr.io/google_containers/kube-apiserver-amd64:v1.7.0
    ${HARBORPRE}/gcr.io/google_containers/kube-controller-manager-amd64:v1.7.0
    ${HARBORPRE}/gcr.io/google_containers/kube-scheduler-amd64:v1.7.0
    ${HARBORPRE}/gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.1
)

#登陆harbor,拉取镜像,更改名称
docker  login -u USER -p PASSWORD http://1.2.3.4
echo '====docker login====='

for DOCKER in ${DOCKERS[@]}; do
    docker pull ${DOCKER}
    docker tag ${DOCKER} ${DOCKER/${HARBORPRE}/}
    docker rmi ${DOCKER}
done

echo '====docker pull image and change tag====='
#安装rpm包
rpm -ivh ./*.rpm --nodeps --force

echo '====kubelet, kubeadm, kubectl install====='
# 有的脚本读取执行文件路径不一样
\cp -f  /usr/bin/kube* /usr/local/bin/

echo '====cp exe file from /usr/bin to /usr/local/bin====='
#将docker文件驱动从systemd更改为cgroupfs,安装不对,会报错
sed -i 's/systemd/cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

echo '====change kubeadm file from systemd to cgroupfs====='

systemctl daemon-reload

echo '====daemon-reload====='
#启动kubelet服务
systemctl start kubelet.service

echo '====start kubelet====='
#以防万一,初始化kubeadm并清除以前安装可能留下的痕迹
kubeadm reset

ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/

iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -F

echo '====kubeadm reset====='
echo '====kube master setup finished====='

初始化kubernetes集群

kubeadm init --apiserver-advertise-address=k8s-master-ip-address  --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.7.0

*一定要指定version,k8s才不会去网上拉docker,指定pod的cidr,因为后面我们是用flannel作vxlan网络支撑.

*一般等待1分钟左右,初始化即可完成。如有问题,可及时查看/var/log/message进行排错。

运行初始化后脚本

生成并运行以下脚本,进行master初始化后安装。(k8s-master-setup_after.sh)

*以下几个文件都是github里的标准文件

#!/bin/bash

mkdir -p $HOME/.kube
\cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f ./kube-flannel-rbac.yaml
kubectl apply -f ./kube-flannel.yaml
kubectl apply -f ./kube-dashboard-rbac.yaml
kubectl apply -f ./kube-dashboard.yaml

确认安装

运行kubectl get命令,确认所有pod及svc状态正常.

kubectl get pods --all-namespaces

kubectl get svc --all-namespaces

从节点安装

上传rpm文件

将所有涉及的rpm包上传到服务器的一个安装目录(e.g:/root/k8s/)

运行从节点前置脚本

生成并运行以下脚本,进行从节点加入前安装。(k8s-node-setup.sh)

#!/bin/bash

HARBORPRE="1.2.3.4/kubernets/"
DOCKERS=(
    ${HARBORPRE}/gcr.io/google_containers/pause-amd64:3.0
    ${HARBORPRE}/quay.io/coreos/flannel-amd64:v0.8.0
    ${HARBORPRE}/gcr.io/google_containers/kube-proxy-amd64:v1.7.0  

)

#登陆harbor,拉取镜像,更改名称
docker  login -u USER -p PASSWORD http://1.2.3.4
echo '====docker login====='

for DOCKER in ${DOCKERS[@]}; do
    docker pull ${DOCKER}
    docker tag ${DOCKER} ${DOCKER/${HARBORPRE}/}
    docker rmi ${DOCKER}
done

echo '====docker pull image and change tag====='
#安装rpm包
rpm -ivh ./*.rpm --nodeps --force

echo '====kubelet, kubeadm, kubectl install====='
# 有的脚本读取执行文件路径不一样
\cp -f  /usr/bin/kube* /usr/local/bin/

echo '====cp exe file from /usr/bin to /usr/local/bin====='
#将docker文件驱动从systemd更改为cgroupfs,安装不对,会报错
sed -i 's/systemd/cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

echo '====change kubeadm file from systemd to cgroupfs====='

systemctl daemon-reload

echo '====daemon-reload====='
#启动kubelet服务
systemctl start kubelet.service

echo '====start kubelet====='
#以防万一,初始化kubeadm并清除以前安装可能留下的痕迹
kubeadm reset

ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/

iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -F

echo '====kubeadm reset====='
echo '====kube master setup finished====='

从节点加入

kubeadm 

*这个token可通过在主节点上运行kubeadm token list获得

从节点加入确认

在主节点上运行kubectl get nodes(从节点上也可以运行,但要先获取认证文件)

扩展功能安装

基于traefik的ingress功能安装

A, 下载traefik最新版本(略)

B, 写traefik-ds.yaml配置文件

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: traefik-ingress-lb
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      restartPolicy: Always
      containers:
      - image: traefik:latest
        imagePullPolicy: IfNotPresent
        name: traefik-ingress-lb
        resources:
          limits:
            cpu: 200m
            memory: 30Mi
          requests:
            cpu: 100m
            memory: 20Mi
        ports:
        - name: http
          containerPort: 80
          hostPort: 80
        - name: admin
          containerPort: 8580
        args:
        - --web
        - --web.address=:8580
        - --kubernetes

C, 写traefik-ing.yaml配置文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-ingress
  namespace: kube-system
spec:
  rules:
  - host: cb.exmaple.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-dm
          servicePort: 8087
  - host: cn.example.cn
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-dm
          servicePort: 8088

D, 应用这两个配置文件

Kubectl apply –f traefik-ds.yaml

Kubectl apply –f traefik- ing.yaml

E,  测试,访问从节点8580端口。

附录

如何曲线获取google上的docker镜像

*见本blog以前的帖子

Kubernetes大版本与各个组件版本的对应关系

Not end

通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]的更多相关文章

  1. Centos7 使用 kubeadm 安装Kubernetes 1.13.3

    目录 目录 什么是Kubeadm? 什么是容器存储接口(CSI)? 什么是CoreDNS? 1.环境准备 1.1.网络配置 1.2.更改 hostname 1.3.配置 SSH 免密码登录登录 1.4 ...

  2. kubeadm安装kubernetes V1.11.1 集群

    之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...

  3. Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

    背景: 由于工作发生了一些变动,很长时间没有写博客了. 概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. 一.Centos7 ...

  4. 使用kubeadm安装kubernetes高可用集群

    kubeadm安装kubernetes高可用集群搭建  第一步:首先搭建etcd集群 yum install -y etcd 配置文件 /etc/etcd/etcd.confETCD_NAME=inf ...

  5. 使用kubeadm安装Kubernetes 1.12

    使用kubeadm安装Kubernetes 1.12 https://blog.frognew.com/2018/10/kubeadm-install-kubernetes-1.12.html 测试环 ...

  6. 使用kubeadm安装kubernetes v1.14.1

    使用kubeadm安装kubernetes v1.14.1 一.环境准备 操作系统:Centos 7.5 ​ ⼀ 一台或多台运⾏行行着下列列系统的机器器: ​ Ubuntu 16.04+ ​ Debi ...

  7. 使用kubeadm 安装 kubernetes 1.15.1

    简介: Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿.kubernetes1.5版本以及之前,安装 ...

  8. 使用 kubeadm 安装 kubernetes v1.16.0

    近日通过kubeadm 安装 kubernetes v1.16.0,踩过不少坑,现记录下安装过程. 安装环境: 系           统:CentOS Linux release 7.6 Docke ...

  9. kubeadm 安装Kubernetes 1.16.3 (CentOS7+IPVS+Calico)

    目录 ·  . 一.更新系统内核(全部节点) ·  . 二.基础环境设置(全部节点) ·  . 1.修改 Host ·  . 2.修改 Hostname ·  . 3.主机时间同步 ·  . 4.关闭 ...

随机推荐

  1. 删除空格-sed

    如下,我需要提取出‘wan’这个字符串.可以发现在‘wan’的前后是有空格,需要将其删除. # lxc list # lxc list | grep lxdbr0 | awk -F "|&q ...

  2. BZOJ2434: [NOI2011]阿狸的打字机(AC自动机+dfs序+树状数组)

    [NOI2011]阿狸的打字机 题目链接:https://www.luogu.org/problemnew/show/P2414 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. ...

  3. synchronize 和volatile 实现共享变量在多线程中的可见性

    1.什么是线程可见性 可见性:一个线程对共享变量值的修改能够及时被其他线程看到. 共享变量:如果一个变量在多个线程工作内存中都存在副本,那么着给按量就是这几个线程的共享变量. 2.导致共享变量在线程间 ...

  4. bug级别分类

    bug级别分类 2014-10-20 10:02 6403人阅读 评论(0) 收藏 举报  分类: SQA(17)  版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   由 ...

  5. 如何在sublime中使用sftp

    在开发中我们通常会遇到一个问题——如何通过一款编辑器(或者IDE)便捷的同步线上代码.目前比较热门的编辑器有sublime,atom等,他们都有sftp功能,鉴于本人更喜欢用轻量级的编辑器,那我就在这 ...

  6. AngularJs 中的CheckBox前后台交互

    前台页面: <div class="form-group"> <label for="CompanyName" class="col ...

  7. mysql 事务,锁,与四大隔离级别

    概念 事务 原子性:事务必须是一个自动工作的单元,要么全部执行,要么全部不执行. 一致性:事务结束的时候,所有的内部数据都是正确的. 隔离性:并发多个事务时,各个事务不干涉内部数据,处理的都是另外一个 ...

  8. 【BZOJ3453】XLkxc [拉格朗日插值法]

    XLkxc Time Limit: 20 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定 k,a,n,d,p f(i ...

  9. Spring 事务管理(山东数漫江湖)

    最新又重新学习了一遍Spring的事务,这里做点总结,不做如何一步步配置的流水账. 1. 关键类 public interface PlatformTransactionManager { Trans ...

  10. bzoj 2440 dfs序

    首先我们可以做一遍dfs,用一个队列记录每个点进出的顺序,当每个点访问的时候que[tot++]=x,记为in[x],当结束dfs的时候que[tot++]=x,记为out[x],这样处理出来的队列, ...