主机规划

10.210.13.4 istio-master
10.210.13.43 istio-node1
10.210.13.12 istio-node2

安装操作系统

CentOS Linux release 7.6.1810 (Core)
使用命令查看操作系统版本
cat /etc/redhat-release
如果你是云主机直接选择对应版本即可。涉及组件较多,可能版本上的偏差会出现不确定性问题

设置域名

vi /etc/hosts

黏贴以下内容,每台机器都指定,host配置与hostname没有必然关系,设置成一致为了习惯以及避免一些相关性问题。

10.210.13.4 istio-master
10.210.13.43 istio-node1
10.210.13.12 istio-node2

设置hostname

在各自对应主机上执行,然后退出终端重新进入,就会发现hostname已变更

hostnamectl set-hostname istio-master
hostnamectl set-hostname istio-node1
hostnamectl set-hostname istio-node2

docker环境搭建

docker安装相对而言比较简单,先卸载本机上得docker
以下是不同情况下的查找和卸载

  • 使用yum 安装得,使用如下命令查看和卸载

    yum list installed|grep docker
    yum remove docker-xxxx
    
  • 自行安装,如果有运行,使用ps -ef|grep docker|grep -v grep 查看命令路径
  • 如果没有启动直接 whereis docker
  • 最后还可以暴力查找 find / -name “docker

暴力删除docker相关的内容

find / -type d -name "*docker*" -exec rm -rf {} \;

发现大量docker0文件无法删除
删除docker0虚拟网卡数据
下线docker0网卡

ifconfig docker0 down

安装bridge-utils

yum -y install bridge-utils

删除docker0 (bridgectl delete bridge docker0)

brctl delbr docker0

再次执行find 命令查找docker 发现完全卸载干净了

find / -name "*docker*"

当然如果你的机器很干净,也可以稍微检查下有可能有些镜像自带集成了docker,但是版本较旧或者过新都可能不稳定
所以我们选择一些稳定版本避免踩别人踩过的坑,当然踩坑也是一种学习的过程。

  • 18.09.9 这个是目前各大云厂商踩完的坑验证的较为稳定的版本

接下来我们打开docker官方文档 docker docs
按照官方文档的步骤来安装,官方有各种系统的安装方式,我们使用centos
添加yum相关工具用于添加docker-ce.repo

sudo yum install -y yum-utils
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo

查看repo

cat /etc/yum.repos.d/docker-ce.repo

替换docker源为清华镜像站,替换完可以再次查看确认

sed -i s@download.docker.com@mirrors.tuna.tsinghua.edu.cn/docker-ce@g /etc/yum.repos.d/docker-ce.repo

更新yum缓存,不要执行 yum update 会更新系统内核

yum -y makecache fast

安装对应版本docker-ce-18.09.9

yum -y install docker-ce-18.09.9

安装完成启动docker,添加开机启动

systemctl start docker
systemctl enable docker

更改镜像仓库为阿里云

tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF

重载配置

systemctl daemon-reload

测试docker是否配置正确

docker run --rm alpine echo "hello docker"

输出hello docker 说明配置正常,docker安装完成

k8s环境搭建

主机规划中我们已经配置完host和hostname
所以我们直接开始安装k8s,打开官网kubectl安装
我们选择centos

配置kubernetes仓库

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

需要修改仓库地址为阿里云,避免被墙,地址为mirrors.aliyuncs.com/kubernetes
修改仓库

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyuncs.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyuncs.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyuncs.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

如果阿里不行也可以改为清华镜像站

sed -i 's@mirrors.aliyuncs.com@mirrors.tuna.tsinghua.edu.cn@g' kubernetes.repo

关闭并查看selinux

setenforce 0
cat /etc/sysconfig/selinux

如果配置文件中还是enforcing 需要改为disabled

安装k8s相关工具

  • kubectl-1.19.16-0
  • kubeadm-1.19.16-0
  • kubelet-1.19.16-0

由于官网未开放同步方式, 可能会有索引gpg检查失败的情况, 所以添加 --nogpgcheck 不检查gpg

yum install -y --nogpgcheck kubectl-1.19.16-0 kubeadm-1.19.16-0 kubelet-1.19.16-0

安装完成查看安装的包

yum list installed |grep kube

启动kubelet

systemctl start kubelet
systemctl enable kubelet

关闭防火墙

关闭swap交换区

swapoff -a
sed -ri 's@(^/.*swap.*)@#\1@g' /etc/fstab
swapoff -a
#查看free -m

安装ip_vs ip虚拟服务器

直接安装

#查看 lsmod |grep ip_vs
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4

配置k8s.ipvs.conf文件

tee /etc/modules-load.d/k8s.ipvs.conf <<-'EOF'
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4
EOF

开启iptables forward

我们用的是ip_vs方案但是这个还是开启来吧免得有问题
先查看

iptables -L -n

并修改docker执行后操作

iptables -P FORWARD ACCEPT
sed -i '/ExecStart/a ExecStartPost=/sbin/iptables -P FORWARD ACCEPT' /usr/lib/systemd/system/docker.service
systemctl daemon-reload

配置kubelet

tee /etc/sysconfig/kubelet <<-'EOF'
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"
EOF

创建master节点

kubeadm init --apiserver-advertise-address=10.210.13.4 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.16 --pod-network-cidr=10.245.0.0/16

这里可能会报错,根据具体错误进行排查,我这边是之前机器安装过所有报了个etcd端口被占用错误。

根据提示配置.kube

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

测试kubectl

kubectl get nodes

此时状态为NotReady,说明配置问题。

根据提示添加节点

kubeadm join 10.210.13.4:6443 --token mxo6v4.6t26hvmnmzk179x6 \--discovery-token-ca-cert-hash sha256:3c61682bcd8e645bcb78ffe328a2cd1386b75ec4a21e35c2ea3a142240c32adf

查看pod

kubectl get pods -A

发现coreDns状态为pending
回到官网coredns pending state
告诉我们安装网络

配置网络

这里有非常多的解决方案

  • ACI
  • calico
  • canal
  • cilium
  • CNI-Genie
  • contiv
  • contrail
  • flannel
  • knitter
  • multus
  • ovn-kubernetes
  • ovn4NFV-k8s-plugin
  • NSX-T
  • Nuage
  • Romana
  • Weave Net
    先选一个耳熟能详的吧,用Calico或者Flannel
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

这边直接使用网络的流文件,如果你需要修改网卡之类的需要将文件下载下来进行修改

查看安装情况

kubectl get pods -A

可以看到镜像拉取失败,没关系多等一会儿就好了
安装完成后

[root@istio-master ~]# kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
istio-master   Ready    master   10h   v1.19.16
istio-node1    Ready    <none>   25m   v1.19.16
istio-node2    Ready    <none>   25m   v1.19.16

安装过程如果还遇到什么其它问题可以看看官方的避坑指南

  • kubeadm避坑指南
  • flannel避坑指南
  • docker避坑指南

全程无坑手撸k8s集群相关推荐

  1. (亲测无坑)Centos7.x使用kubeadm安装K8s集群1.15.0版本

    基础环境配置 三台Centos7.x的服务器,主节点 cpu >=2,node节点>=1 注:(上述cpu为最低配置,否则集群安装部署会报错,无法启动,对其他硬件无硬性要求) 以下操作若无 ...

  2. 牛批!简单几步,无坑部署最小化 K8S 集群

    点击下方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 虽然网上有大量从零搭建 K8S 的文章,但大都针对老 ...

  3. 浅谈大规模k8s集群关于events的那些坑

    浅谈大规模k8s集群关于events的那些坑 背景 一.用户通过kubectl list event 二.kubernetes-dashboard list events 三.直接在集群中list e ...

  4. 云服务器搭建k8s集群的巨坑,node间网络不通问题

    最近用腾讯云服务器搭建了k8s集群,踩到一个巨坑.现象就是服务正常搭建完毕,各个必须的pod也处于ready状态,但是node不能访问别的node的pod.搭建的示例tomcat的demo也不能通过外 ...

  5. 万级K8s集群背后etcd稳定性及性能优化实践

    作者:唐聪, 腾讯 CSIG 后台开发工程师 本文旨在帮助大家了解 etcd集群场景下稳定性与性能优化经验引的容量,避免给后面留坑. 背景与挑战 随着腾讯自研上云及公有云用户的迅速增长,一方面,腾讯云 ...

  6. 工商银行:应用多k8s集群管理及容灾实践

    摘要:在华为开发者大会(Cloud)2021上,工商银行Paas云平台架构师沈一帆发表了<工商银行多k8s集群管理及容灾实践>主题演讲,分享了工商银行使用多云容器编排引擎Karmada的落 ...

  7. 记一次在K8s集群搭建的MySQL主从无法正常启动之数据迁移恢复实践

    本章目录:记一次在K8s集群搭建的MySQL主从无法正常启动之数据迁移恢复实践 描述:在K8s集群中里利用bitnami提供的mysql:5.7.32-debian-10-r61镜像并利用helm进行 ...

  8. 手把手教你在centos7安装k8s集群

    最近在整理回顾k8s相关的知识,实操手动去搭建一个简易的k8s集群环境(作者本人搭建的是k8s集群version v1.23.3),花了挺多时间,踩了不少坑.不过最终还是把环境跑起来了,大家按照我的方 ...

  9. 实战:kubeadm方式搭建k8s集群(k8s-v1.22.2,containerd-v1.5.5)-2023.2.22(测试成功)

    实验环境 1.硬件环境 3台虚机 2c2g,20g.(nat模式,可访问外网) 角色 主机名 ip master节点 master1 172.29.9.51 node节点 node1 172.29.9 ...

最新文章

  1. jQuery中deferred对象的使用(二)
  2. python画切片图_python切片操作
  3. 5g网络架构_【5G网络架构】系列之二:5G基站—gNodeB。为什么叫gNodeB?取个名而已,需要理由吗?...
  4. 使用Keras和TensorFlow构建深度自动编码器
  5. jio文件 久其_功能强大的Windows文件管理器工具
  6. 2.04 对字母数字的混合排序
  7. python读音有道-python爬虫之有道在线翻译
  8. 基本的阿里云Linux服务器设置
  9. Atitit 语音识别的技术原理
  10. 计算机常用算法对照表整理
  11. Redis可视化工具
  12. WebRoot 与 WEB-INF 相关问题学习整理
  13. 晶振及其内部电路详解:
  14. 电脑qq聊天记录迁移--备份与恢复
  15. java 加密与解密算法,简单地加密和解密算法(java实现)
  16. Monkey工具详解
  17. 收藏级干货——Auto CAD历史版本功能大盘点(下)
  18. word-wrap控制长单词或URL地址换行
  19. 密集人群计数 密度图回归 原理
  20. 这一波再抢不到微信红包封面,就只能怪你自己了

热门文章

  1. 「群体遗传学实战」第一课: 对SNP位点进行注释
  2. 拉普拉斯-Laplacian
  3. 【SQL Server】模糊查询
  4. 学会这几点,不懂代码也能做出炫酷可视化大屏!
  5. Universal DEP/ASLR bypass with msvcr71.dll and mona.py
  6. IDEA 返回上一步,回到下一步 冲突 快捷键设置
  7. java 浏览器 qq_qq浏览器通用版 手机QQ浏览器v2.1Java通用版下载
  8. Dolby技术汇总(二) --- Dolby Mobile
  9. linux系统性能监控--内存利用率
  10. 【机器学习 - 8】:随机梯度下降法