♦♦♦这里介绍使用kubeadm安装k8s集群,因为这种搭建方式需要访问grc.io(https://cloud.google.com/container-registry/)(国内被墙了)下载对应的image,所以需要确保自己能访问该网站♦♦♦

♦♦♦即使网络不能访问,也有折中的解决办法,具体请看详细安装步骤♦♦♦

安装前准备:

  • 关闭iptables/ufw:  service ufw disable
  • 关闭swap:  swapoff  -a
  • Centos还需要关闭SELinux/firewalld

下面使用kubeadm来创建k8s cluster
1. 所有主机节点上都需要安装docker

# sudo apt-get update
# sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# sudo apt-key fingerprint 0EBFCD88
output:
pub rsa4096 -- [SCEA]
9DC8 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 -- [S] # sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# sudo apt-get update
# sudo apt-get install docker-ce docker-ce-cli containerd.io

其他操作系统参考官方文档: https://docs.docker.com/install/linux/docker-ce/ubuntu/

2. config /etc/hostname,config every node and hostname

修改主机名,规划好master和node

修改/etc/hostname文件来永久修改hostname

$ sudo hostnamectl set-hostname  k8s-nodex

3. (独立安装 kubectl,可以跳过本部选择在步骤4中一起安装)在所有节点上安装 kubectl

# curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
# curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt #获取当前稳定版本
# curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/linux/amd64/kubectl #版本号根据需要可自行修改
# chmod +x ./kubectl
# sudo mv ./kubectl /usr/local/bin/kubectl
# source <(kubectl completion bash) ###ubuntu版本如果支持快捷安装可以执行以下命令来安装###
# sudo snap install kubectl --classi

4. 在所有节点上安装  kubectl kubelet kubeadm

# apt-get update && apt-get install -y apt-transport-https
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y kubectl kubelet kubeadm 国内请使用aliyun源:
# sudo apt-get update && apt-get install -y apt-transport-https
# sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# sudo apt-get update
# apt-get install -y kubectl kubelet kubeadm

5. 初始化master节点

♦♦♦

Kubenetes默认Registries地址是k8s.gcr.io,很明显,在国内并不能访问gcr.io,因此在kubeadm v1.13之前的版本,安装起来非常麻烦,但是在1.13版本中终于解决了国内的痛点,其增加了一个--image-repository参数,默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers,其它的就可以完全按照官方文档来操作。

我们还需要指定--kubernetes-version参数,因为它的默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本(最新版:v1.14.2)来跳过网络请求。

♦♦♦

pod网络插件是必要安装,以便pod可以相互通信. 请提前确认自己需要使用的pod网络插件,以Flannel为例,为了使Flannel正常工作,执行kubeadm init命令时需要增加--pod-network-cidr=10.244.0.0/16参数

# kubeadm init --pod-network-cidr=10.244.0.0/16     # k8s.gcr.io可以访问的情况下可以直接执行init
# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.14.2 --pod-network-cidr=10.244.0.0/16  # 通过跳转registry的方式安装 以上两种init的方式自己根据情况选择执行

 

use tocken: qjm4v2.8mqfbjrtjpf2xmq2
output:
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.100.0.128:6443 --token qjm4v2.8mqfbjrtjpf2xmq2 \
--discovery-token-ca-cert-hash sha256:65131ae78527130dfd6ccf0b6be6e86d2089c4d07856d7f318cede1ce84fb0ef

6. 安装pod网络插件flannel

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

这里由于国内墙的原因,kubelet可能无法拉取flannel镜像,需要手动执行命令拉取:
flannel 镜像详细的版本号可以执行以下命令查询:
# kubectl get pod -n kube-system
# kubectl describe pod kube-flannel-ds-amd64-xxx -n kube-system # kube-flannel-ds-amd64-xxx 为上一条命令查询出来的flannel pod
拉取镜像:
# docker pull quay.io/coreos/flannel:v0.11.0-amd64 # 如果不能直接连接gcr.io,在node节点上也要手动拉取这个镜像
§§特别说明一下,由于我家里是长城宽带,执行命令拉取的时候还是报错,于是我用手机共享了手机联通网络做热点,结果还真的下载成功了!§§

 再次安装flannel插件即可:

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

然后再查询集群状态,可以看到kube-flannel-ds-xxx Pod状态为running,master节点状态也变为Ready,表明master节点初始化成功了。happy!!!

 

flannel支持多种模型

  • VxLAN #vxLAN有以下两种模式

    • vxlan #叠加网络或者隧道网络,通过封装网络报文的方式使不同网段的pod之间可以通讯
    • Directrouting #直接使用主机的IP地作为网关,通过主机路由的方式与目标pod进行通讯,当目标pod与当前pod不在同一三层网络内,会自动降级为VxLAN模式
  • host-gw: Host GateWay #与VxLAN的Directrouting模式相同,当目标pod与当前pod不在同一三层网络内时,pod之间无法通讯
  • UDP: #早期由于Linux内核不支持VxLAN,host-gw又有非常高的入门门槛,udp是flannel最早期使用的模式,由于使用普通的udp报文通讯,性能非常差,在可以使用前面两种模式的情况下请勿使用该模式
  • 默认flannel的模式为vxlan,可以修改为性能更好的directrouting模式,修改见下图

    

7. 添加node工作节点

  • SSH到node节点
  • 切换到root用户
  • 执行添加node命令:
# kubeadm join --token <token> <master-ip>:<master-port>
这里可以直接copy master节点init过程末尾的kubeadm join 命令行直接执行 默认情况下,token的有效期是24小时,如果我们的token已经过期的话,可以使用以下命令重新生成:
# kubeadm token create

 如果我们也没有--discovery-token-ca-cert-hash的值,可以使用以下命令生成:

# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

8. 所有node节点加入到master节点之后,可以执行以下命令查看集群信息

# kubectl get nodes

[root@maple-master opt]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
maple-master Ready    master 30m v1.14.2
k8s-node1    Ready    node   2m v1.14.2
k8s-node2    Ready    node   2m v1.14.2

Note: kubeadm reset 可以重置'kubeadm init' or 'kubeadm join'的操作。  同时需要删除家目录下的.kube 目录。才能恢复到初始化之前的状态

参考文档:http://docs.kubernetes.org.cn/459.html

     https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/

     https://www.cnblogs.com/yitianyouyitian/p/10143217.html  解决了国内无法下载相关image的问题,成功init

ubuntu18.04搭建 kubernetes(k8s)集群的更多相关文章

  1. Ubuntu18.04 搭建zookeeper单机版集群

    一台电脑启动三个虚拟机比较折腾,这里就用一台虚拟机模拟一下zk集群. 1.后台下载安装包到 /opt目录 sudo wget -b http://archive.apache.org/dist/zoo ...

  2. Centos7 安装部署Kubernetes(k8s)集群

    目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernetes集群 4. ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  4. 搭建Kubernetes容器集群管理系统

    1.Kubernetes 概述 Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.劢态扩缩容等功能套件. 基 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  9. 使用kubectl管理Kubernetes(k8s)集群:常用命令,查看负载,命名空间namespace管理

    目录 一.系统环境 二.前言 三.kubectl 3.1 kubectl语法 3.2 kubectl格式化输出 四.kubectl常用命令 五.查看kubernetes集群node节点和pod负载 5 ...

  10. Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14

    目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...

随机推荐

  1. asp.net mvc 5发布部署遇到403.14

    asp.net mvc 5发布部署遇到403.14? HTTP错误 403.14 服务器配置为不列出此目录内容 除了设置.net运行的权限 isap和cgi启动状态外.可能是因为你手贱. 将这个钩去掉 ...

  2. 百度地图API开发一——仿照现有测距效果实现测面功能

      最近做了一个百度地图API的开发项目,里面有测量距离和测量面积的功能需求.测量距离百度给出了封装好的javascript包——BMapLib.DistanceTool,效果如下: 这个效果体验很好 ...

  3. linux_FTP连接失败

    service vsftpd status vim /etc/vstpd/vsfptd.conf service vsftpd restart service iptables status serv ...

  4. 怎樣添加設置GridView,CheckBox全選功能

    GridView內CheckBox控件全選設置 不需要添加後台代碼操作,前端即可完成設置,如下: 前端代碼: 1.設置javascript. <html xmlns="http://w ...

  5. 影响Linux发展的四位天才黑客

    影响Linux发展的四位天才黑客 相信大家对 Linux 再熟悉不过了.我们都知道 Linux继承自 Unix,但其实他们上一代还有一个 Multics.从最早的 Multics 发展到最早版本的 L ...

  6. CentOS7 升级 gvim 到 8.x 版本

    因为 CentOS7 在默认情况下,通过 yum 安装的 vim-X11.x86_64 版本为 7.x 版本,对 Youcompleteme 支持不好.故需要升级到 8.x 版本. 以下记录 gvim ...

  7. mybatis中常见的问题总结

    如下所有举例基于springboot+mybatis项目中,SSH使用mybatis的写法也一样,只是形式不同而已 问题1.org.apache.ibatis.binding.BindingExcep ...

  8. HashMap源码分析(基于jdk8)

    我们知道在jdk7中HashMap的实现方式是数组+链表.而在jdk8中,实现有所变化,使用的是数组+链表+红黑树实现的. 当链表长度达到8时转化为红黑树. static final int TREE ...

  9. LeetCode21—合并两个有序链表

    方法一:这是我一开始的想法,将链表L2的各个元素与链表L1的元素进行逐一比较,将L2中的数据元素插入L1中的合适位置. 时间复杂度:O(m+n):空间复杂度:O(1) 1)首先,可能要对第一个元素进行 ...

  10. Activiti6-IdentityService(学习笔记)

    IdentityService并不依赖我们的流程部署文件,所以 直接放使用方法的测试代码了: public class IdentityServiceTest { private static fin ...