一、概述
本文主要讲述在centos7环境下如何使用kubeadm工具快速搭建一个k8s集群。同时也讲述了如何安装Istio
k8s版本:1.20.6
istio版本:1.5.1
二、准备工作
2.1 机器环境
操作系统:centos7 64位
硬件配置:2g RAM 2个cpu 硬盘40g
主机名 | 角色 | IP |
---|---|---|
master | master | 192.168.0.19 |
node1 | node1 | 192.168.0.20 |
node2 | node2 | 192.168.0.21 |
分别在每台机器上执行
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
# 关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.44.146 k8smaster
192.168.44.145 k8snode1
192.168.44.144 k8snode2
EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
2.2 软件环境
安装docker
Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce-18.06.1.ce-3.el7
$ systemctl enable docker && systemctl start docker
$ docker --version
Docker version 18.06.1-ce, build e68fc7a
$ cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
添加阿里云YUM软件源
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm,kubelet和kubectl
$ yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
$ systemctl enable kubelet
三、安装
3.1 部署k8s Master
在 192.168.0.19(Master)执行。
$ kubeadm init \
--apiserver-advertise-address=192.168.0.19 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
注:
- apiserver-advertise-address 需要修改为自己的ip地址
- kubernetes-version 这里的版本号要和上面安装的版本号一致
- image-repository 手动配置阿里云镜像地址,国内网络环境,你懂的
安装完成后,会看到successful 字样的提示,同时也会给你一段提示,按照提示执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl get nodes
同时需要copy下 最后输出的kuadm join那段文字,如下
$ kubeadm join 192.168.0.19:6443 --token esce21.q6hetwm8si29qxwn \
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
3.2 部署node节点
把刚刚copy 的kuadm join那段文字,粘贴到node节点执行
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
3.3 部署CNI网络插件
如果不安装则集群间的网络会不通
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看是否安装完成
kubectl get pods -n kube-system
出现图中红框(因为我有3个机器,所以是3个)且状态均为Running,则表示安装成功
使用get node查看节点信息
kubectl get nodes
状态均为Ready,则表示K8S 集群安装成功
四、安装istio
首先 下载安装包,因为我们要安装1.5.1版本,所以需要指定版本
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.5.1 TARGET_ARCH=x86_64 sh -
之后,会多出一个istio-1.5.1的目录 ,
将 istio-1.5.1/bin 配置到 path 中
vim /etc/profile
### 将下面这个内容添加到文件末尾
export PATH=$PATH:/root/istio-1.5.1/bin
之后就可以使用istioctl
命令行工具了,该命令行工具具有用户输入校验功能,可以防止错误的安装和自定义选项。
我们使用demo的配置进行安装
istioctl manifest apply --set profile=demo
安装命令运行成功后,检查 Kubernetes 服务是否部署正常,检查除 jaeger-agent
服务外的其他服务,是否均有正确的 CLUSTER-IP
:
$ kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.108.112.31 <none> 3000/TCP 24s
istio-egressgateway ClusterIP 10.106.157.7 <none> 80/TCP,443/TCP,15443/TCP 26s
istio-ingressgateway LoadBalancer 10.110.57.34 <pending> 15020:31817/TCP,80:30733/TCP,443:31910/TCP,15029:32168/TCP,15030:31733/TCP,15031:31981/TCP,15032:30531/TCP,31400:31169/TCP,15443:31131/TCP 26s
istio-pilot ClusterIP 10.110.196.147 <none> 15010/TCP,15011/TCP,15012/TCP,8080/TCP,15014/TCP,443/TCP 46s
istiod ClusterIP 10.104.27.234 <none> 15012/TCP,443/TCP 46s
jaeger-agent ClusterIP None <none> 5775/UDP,6831/UDP,6832/UDP 24s
jaeger-collector ClusterIP 10.103.156.147 <none> 14267/TCP,14268/TCP,14250/TCP 24s
jaeger-collector-headless ClusterIP None <none> 14250/TCP 24s
jaeger-query ClusterIP 10.110.109.206 <none> 16686/TCP 24s
kiali ClusterIP 10.96.182.125 <none> 20001/TCP 24s
prometheus ClusterIP 10.104.167.86 <none> 9090/TCP 24s
tracing ClusterIP 10.102.230.151 <none> 80/TCP 24s
zipkin ClusterIP 10.111.66.10 <none> 9411/TCP 24s
检查相关 pod 是否部署成功:
$ kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-5cc7f86765-jxdcn 1/1 Running 0 4m24s
istio-egressgateway-598d7ffc49-bdmzw 1/1 Running 0 4m24s
istio-ingressgateway-7bd5586b79-gnzqv 1/1 Running 0 4m25s
istio-tracing-8584b4d7f9-tq6nq 1/1 Running 0 4m24s
istiod-646b6fcc6-c27c7 1/1 Running 0 4m45s
kiali-696bb665-jmts2 1/1 Running 0 4m24s
prometheus-6c88c4cb8-xchzd 2/2 Running 0 4m24s