部署方式:
1.把组件都部署为系统级的daemon形式,安装在主机节点上,用systemctl管控启停,安装过程需要手动解决。(为了安全需要ca证书,很繁琐)
2.使用kubeadm集群部署管理工具来部署。把k8s核心组件也部署为pod。
kubeadm:所有节点都要安装docker、kubelet、kubeadm,把第一个节点初始化为master,剩下的节点运行为node.
静态pod(static pod):除flannel外,其他k8s核心组件运行的pod都为静态pod
master:api-server、kube-scheduler、kube-controller-manager、etcd、flannel 运行为pod
node:kube-proxy,flannel 运行为pod

一、环境准备

所有规划主机(一台master,两台node)均需操作

1、关闭防火墙,selinux

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# setenforce
[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

2、时间同步服务器

3、关闭swap分区(临时方案)

[root@master ~]# swapoff –a

除了关闭swap外,还可以更改kubelet配置,忽略swap

[root@master ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

4、host配置

节点之间可以互相解析,host文件配置。

5、ssh等效性配置

Master对node免密登录

6、加载内核模块

配置系统内核参数使流过网桥的流量也进入iptables/netfilter框架,需加载需要的内核模块。

[root@master ~]# modprobe br_netfilter
[root@master ~]# modprobe ip_conntrack
[root@master ~]# echo -e 'net.bridge.bridge-nf-call-iptables = 1 \nnet.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
[root@master ~]# sysctl -p

7、Yum源配置(base,epel,k8s,docker)

[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir bak
[root@node1 yum.repos.d]# mv * bak/
[root@node1 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@node1 yum.repos.d]# wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
[root@node1 yum.repos.d]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=
gpgcheck=
EOF
[root@node1 yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@node1 yum.repos.d]# yum clean all && yum makecache fast

二、集群创建

1、安装kubeadm及相关工具

所有节点都需要操作。

[root@master ~]# yum install docker kubectl kubeadm  kubelet  -y  #默认安装最新版本,可指定版本(yum install docker kubectl-1.10. kubeadm-1.10. kubelet-1.10.  -y)
启动相关进程:
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl enable docker && systemctl restart docker
[root@master ~]# systemctl enable kubelet

在此处不能直接启动kubelet,启动不了,会不停重启。

2、master init 集群

(不能访问国外仓库的情况下,可指定国内仓库,或在启动配置文件里修改仓库地址)

[root@master ~]# kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/ --service-cidr=10.96.0.0/  --image-repository registry.aliyuncs.com/google_containers
# kubeadm config images pull
# kubeadm reset

初始化失败,根据提示查找失败原因。

kubelet和docker 的cgroup driver 有2种方式:cgroupfs和systemd.注意保持 2个应用的driver保持一致。(如果docker是cgroupfs的,则修改kubelet :Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"。如果docker为systemd,则不用更改)

查看docker driver:

[root@master ~]# vim /usr/lib/systemd/system/docker.service

[root@node1 ~]# docker info

查看kubelet driver:

[root@master ~]# vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

[root@master ~]# vim  /var/lib/kubelet/kubeadm-flags.env

最终成功实验: docker driver改为cgroupfs ,kubelet 为systemd,kubeadm init成功,但官方建议docker driver为systemd,是否与版本有关,存疑???

3、node 加入集群

准备工作,master节点上操作

[root@master ~]# useradd kubelet

[root@master ~]# passwd kubelet

把kubelet用户加入sudo用户组

[root@master ~]# su - kubelet

[kubelet@master ~]$ mkdir -p $HOME/.kube

[kubelet@msaster ~]$  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[kubelet@master ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

在node1上运行join:

[root@node1 ~]# kubeadm join 192.168.42.128:6443 --token vo63m6.gnlukzl3myf1m3v8 \

--discovery-token-ca-cert-hash sha256:5212f47a507fb30cbe8f14b35c1d92748874eda5d9ef60e38efca373a487567a

4、网络配置

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

至此,k8s集群搭建成功。结果如下:

4、在已有集群中添加节点:

新节点准备,在各节点上做好主机名,hosts文件映射,ssh等效性配置,关闭swap等初始化操作,安装docker,kubelet并正常启动;

在master上打印出加入集群的命令:

[kubelet@master ~]$ kubeadm token create --print-join-command

在新节点上执行以上命令

执行加入命令时如果报错,报错内容为:error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition。进行如下操作:

[root@node2 ~]# swapoff -a
[root@node2 ~]# kubeadm reset
[root@node2 ~]# iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables –X
[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl restart kubelet

遇kubelet报错如下:Failed to get system container

问题产生原因为:kubernetes和docker版本兼容性问题。

三、遇到的问题

默认 kubeadm 创建的集群会在内部启动一个单点的 etcd,当然大部分情况下 etcd 还是很稳定的,但是一旦etcd 由于某种原因挂掉,这个问题会非常严重,会导致整个集群不可用。具体原因是 etcd 存储着 kubernetes 各种元数据信息;包括 kubectl get pod 等等基础命令实际上全部是调用 RESTful API 从 etcd 中获取的信息;所以一但 etcd 挂掉以后,基本等同于 kubectl 命令不可用,此时将变为 ‘瞎子’,集群各节点也会因无法从 etcd 获取数据而出现无法调度,最终挂掉。

此时kube-apiserver因为连接不到etcd,死活启动不起来。然后整个集群就没救了。

单独启动etcd容器也启动不起来,容器会不停的被删除重启,但就是启动不起来。

[root@master manifests]# docker logs -f 76797c65b499  #查看日志。

只能重建集群,之前的所有信息都没有了。

四、Tips:

更改docker仓库地址:

[root@master ~]# vim /etc/sysconfig/docker
OPTIONS=' --log-driver=journald --registry-mirror=http://xxxx.mirror.aliyuncs.com

K8s和docker要版本兼容,不能直接yum,版本对照参照git文档

# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

1.使用kubeadm安装kubernetes的更多相关文章

  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. 使用kubeadm安装kubernetes高可用集群

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

  4. 使用kubeadm安装Kubernetes 1.12

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

  5. 使用kubeadm安装kubernetes v1.14.1

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

  6. 使用kubeadm 安装 kubernetes 1.15.1

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

  7. 使用 kubeadm 安装 kubernetes v1.16.0

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

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

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

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

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

  10. 在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践

    前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernetes由于"scientifically上网"问题举步维艰,本文以实战经 ...

随机推荐

  1. Html/CSS 示例演练 图书馆后台界面

    示例演练(html css javascript) --制作图书馆后台界面 1. 成品图

  2. debian ssh/sftp

    检查是否安装了openssh dpkg --get-selections | grep openssh 安装命令 sudo apt-get install openssh-server 安装成功的字样 ...

  3. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_07.环境搭建的注意事项

    2 resources下面创建目录要一级一级的创建,下面这个创建的就是一级目录而不是三级 在文件夹下看到的目录也是一级的 因此这里创建目录需要一个个的去创建 配置文件和dao类这两个目录要保持一致,这 ...

  4. 【SpringMVC】---RequestMapping、Ant 路径、PathVariable 注解、HiddenHttpMethodFilter 过滤器、用 POJO 作为参数

    一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  5. 安装iamp模块,编译报错configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.

    yum install libc-client-devel cd /root/lnmp1.0-full/php-5.3.17/ext/imap /usr/local/php/bin/phpize ./ ...

  6. Command line is too long. Shorten command line for testMLDome1 or also for Application default configuration

    在.idea文件夹中,更改workspace.xml文件 加这段语句: <property name="dynamic.classpath" value="true ...

  7. Spark集成的包与引入包冲突

    今天在编写Spark应用的时候,想把处理结果输出为JSON字符串,查到Java比较常用的JSON处理包gson,按照其API编写代码后运行程序,总是出现"NoSuchMethodExcept ...

  8. 第十四周总结 Io之文件流

    I/O相关 输入/输出 流(数据流动) 数据流动的方向 读数据(输入input) 写数据(输出output) 文件流 字符流 数据流 对象流 网络流.... 1.什么叫文件 一种电脑的存储方式 文件有 ...

  9. Projection Pursuit Regression----读书笔记

    The central idea is to extract linear combinations of the inputs as derived features, and then model ...

  10. [LeetCode] 109. 有序链表转换二叉搜索树

    题目链接 : https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/ 题目描述: 给定一个单链表,其中的 ...