♦♦♦这里介绍使用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 2017-02-22 [SCEA]9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [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. Centos7 安装部署Kubernetes(k8s)集群过程

    1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...

  2. 自己搭建的k8s集群,怎么做负载均衡?

    如果把K8S搞在公有云上,可以跟云厂商买它的负载均衡服务,就用这个负载均衡服务提供的公网IP,把你的域名映射到这个公网IP上,然后配置这个云厂商提供的负载均衡服务,让它往后端的ECS主机上转发 但是呢 ...

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

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

  4. 直播 | 基于kubeadm搭建Kubernetes HA集群

    分享时间:6月18日 20:30 分享主题:基于kubeadm搭建Kubernetes HA集群 分享人介绍: 张炯,上汽集团下属赛可出行运维工程师.10年工作经验,曾任职于Ctrip.SNDA,作为 ...

  5. 在sealos搭建的k8s集群中自定义kubeconfig文件

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  6. 【云原生-K8s】kubeadm搭建安装k8s集群v1.25版本完整教程【docker、网络插件calico、中间层cri-docker】

    前言 基础描述 从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能 ...

  7. kubeadm搭建的K8S集群升级

    微信公众号:运维开发故事,作者: 乔克 升级说明 可用的K8S集群,使用kubeadm搭建 可以小版本升级,也可以跨一个大版本升级,不建议跨两个大版本升级 对集群资源做好备份 升级目标 将kubern ...

  8. Kubernetes(k8s)集群安装(需要3台centos7)

    k8s安装的命令 1:关闭防火墙,关闭selinux 2:修改主机名 3:修改hosts文件 4:禁用swap内存交换 5:安装docker 6:上传k8s.repo 7:初始化集群 8:初始化k8s ...

  9. Kubernetes(k8s)集群部署七、k8s网络通信+service扩展ingress(TLS,认证,地址重写)calico网络插件(允许指定pod访问服务,禁止其他namespace访问服务)

    k8s网络通信 k8s网络通信 1.容器间通信 2.pod之间的通信 2.1同一节点的pod 2.2不同节点的pod之间的通信 flannel网络原理 flannel支持多种后端: 3.pod和ser ...

最新文章

  1. BZOJ 2301 [HAOI2011]Problem b
  2. 在oracle下我们如何正确的执行数据库恢复
  3. springboot异步注解_Spring Boot 2 :Spring Boot 中的响应式编程和 WebFlux 入门
  4. 使用winform来递归实现资源管理器
  5. vim 插件之vim-trailing-whitespace
  6. SpringMVC集成Thymeleaf
  7. 项目管理学习总结(13)——高效能技术Leader的30条军规
  8. uniApp实现二维码带中间logo图(uQRCode插件)
  9. eclipse配置tomcat日志保存位置
  10. AHCI驱动问题导致Windows 10卡死的解决办法
  11. Unity Editor 编辑器介绍
  12. Xdebug、Zend bugger与Zend Optmizer不兼容问题
  13. 文创礼品受追捧 华丽跨界火出圈
  14. SEO图片优化小技巧
  15. 显卡内存和计算机内存,显卡爆显存和满显存有什么区别
  16. 计算机丢失系统文件如何找回,如何恢复电脑上丢失的文件
  17. 解决PRprocs5安装问题的方法
  18. 167、缓存-SpringCache-简介
  19. TX2 Install OpenCV(4.0.0)
  20. 我究竟为了什么而活着

热门文章

  1. python安装后在哪里找_python安装后的目录在哪里
  2. 04.内置analyzer和analyze-API使用
  3. 给我往死里贪——HRBUST - 1167-每种面值的货币要多少
  4. java对角线之和_java编程之计算矩阵对角线和(从命令窗输入数据)
  5. 实验详解——DNS反向解析、DNS主服务器和从服务器的配置
  6. 北大计算机大神,北大数学大神有多强?简直叹为观止
  7. FreeRTOS内核详解(1) —— 临界段保护原理
  8. python从mysql导出大量数据_python批量导出导入MySQL用户的方法
  9. c++ windows 点击按钮跳转另一个窗体_PyQt5学习笔记(一)窗体控制
  10. mysql将大表定时转储_mysql数据库数据定时封装转储