主机规划

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

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐