ubuntu18.04搭建 kubernetes(k8s)集群
♦♦♦这里介绍使用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)集群相关推荐
- Centos7 安装部署Kubernetes(k8s)集群过程
1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...
- 自己搭建的k8s集群,怎么做负载均衡?
如果把K8S搞在公有云上,可以跟云厂商买它的负载均衡服务,就用这个负载均衡服务提供的公网IP,把你的域名映射到这个公网IP上,然后配置这个云厂商提供的负载均衡服务,让它往后端的ECS主机上转发 但是呢 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- 直播 | 基于kubeadm搭建Kubernetes HA集群
分享时间:6月18日 20:30 分享主题:基于kubeadm搭建Kubernetes HA集群 分享人介绍: 张炯,上汽集团下属赛可出行运维工程师.10年工作经验,曾任职于Ctrip.SNDA,作为 ...
- 在sealos搭建的k8s集群中自定义kubeconfig文件
推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...
- 【云原生-K8s】kubeadm搭建安装k8s集群v1.25版本完整教程【docker、网络插件calico、中间层cri-docker】
前言 基础描述 从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能 ...
- kubeadm搭建的K8S集群升级
微信公众号:运维开发故事,作者: 乔克 升级说明 可用的K8S集群,使用kubeadm搭建 可以小版本升级,也可以跨一个大版本升级,不建议跨两个大版本升级 对集群资源做好备份 升级目标 将kubern ...
- Kubernetes(k8s)集群安装(需要3台centos7)
k8s安装的命令 1:关闭防火墙,关闭selinux 2:修改主机名 3:修改hosts文件 4:禁用swap内存交换 5:安装docker 6:上传k8s.repo 7:初始化集群 8:初始化k8s ...
- 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 ...
最新文章
- BZOJ 2301 [HAOI2011]Problem b
- 在oracle下我们如何正确的执行数据库恢复
- springboot异步注解_Spring Boot 2 :Spring Boot 中的响应式编程和 WebFlux 入门
- 使用winform来递归实现资源管理器
- vim 插件之vim-trailing-whitespace
- SpringMVC集成Thymeleaf
- 项目管理学习总结(13)——高效能技术Leader的30条军规
- uniApp实现二维码带中间logo图(uQRCode插件)
- eclipse配置tomcat日志保存位置
- AHCI驱动问题导致Windows 10卡死的解决办法
- Unity Editor 编辑器介绍
- Xdebug、Zend bugger与Zend Optmizer不兼容问题
- 文创礼品受追捧 华丽跨界火出圈
- SEO图片优化小技巧
- 显卡内存和计算机内存,显卡爆显存和满显存有什么区别
- 计算机丢失系统文件如何找回,如何恢复电脑上丢失的文件
- 解决PRprocs5安装问题的方法
- 167、缓存-SpringCache-简介
- TX2 Install OpenCV(4.0.0)
- 我究竟为了什么而活着
热门文章
- python安装后在哪里找_python安装后的目录在哪里
- 04.内置analyzer和analyze-API使用
- 给我往死里贪——HRBUST - 1167-每种面值的货币要多少
- java对角线之和_java编程之计算矩阵对角线和(从命令窗输入数据)
- 实验详解——DNS反向解析、DNS主服务器和从服务器的配置
- 北大计算机大神,北大数学大神有多强?简直叹为观止
- FreeRTOS内核详解(1) —— 临界段保护原理
- python从mysql导出大量数据_python批量导出导入MySQL用户的方法
- c++ windows 点击按钮跳转另一个窗体_PyQt5学习笔记(一)窗体控制
- mysql将大表定时转储_mysql数据库数据定时封装转储