一、概述
本文主要讲述在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 |
分别在每台机器上执行
1# 关闭防火墙 2systemctl stop firewalld 3systemctl disable firewalld 4 5# 关闭selinux 6sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 7setenforce 0 # 临时 8 9# 关闭swap 10swapoff -a # 临时 11sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久 12 13# 根据规划设置主机名 14hostnamectl set-hostname <hostname> 15 16# 在master添加hosts 17cat >> /etc/hosts << EOF 18192.168.44.146 k8smaster 19192.168.44.145 k8snode1 20192.168.44.144 k8snode2 21EOF 22 23# 将桥接的IPv4流量传递到iptables的链 24cat > /etc/sysctl.d/k8s.conf << EOF 25net.bridge.bridge-nf-call-ip6tables = 1 26net.bridge.bridge-nf-call-iptables = 1 27EOF 28sysctl --system # 生效 29 30# 时间同步 31yum install ntpdate -y 32ntpdate time.windows.com
2.2 软件环境
安装docker
Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。
1$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 2$ yum -y install docker-ce-18.06.1.ce-3.el7 3$ systemctl enable docker && systemctl start docker 4$ docker --version 5Docker version 18.06.1-ce, build e68fc7a
1$ cat > /etc/docker/daemon.json << EOF 2{ 3 "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] 4} 5EOF
添加阿里云YUM软件源
1$ cat > /etc/yum.repos.d/kubernetes.repo << EOF 2[kubernetes] 3name=Kubernetes 4baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 5enabled=1 6gpgcheck=0 7repo_gpgcheck=0 8gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 9EOF
安装kubeadm,kubelet和kubectl
1$ yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 2$ systemctl enable kubelet
三、安装
3.1 部署k8s Master
在 192.168.0.19(Master)执行。
1$ kubeadm init \ 2 --apiserver-advertise-address=192.168.0.19 \ 3 --image-repository registry.aliyuncs.com/google_containers \ 4 --kubernetes-version v1.20.6 \ 5 --service-cidr=10.96.0.0/12 \ 6 --pod-network-cidr=10.244.0.0/16
注:
- apiserver-advertise-address 需要修改为自己的ip地址
- kubernetes-version 这里的版本号要和上面安装的版本号一致
- image-repository 手动配置阿里云镜像地址,国内网络环境,你懂的
安装完成后,会看到successful 字样的提示,同时也会给你一段提示,按照提示执行以下命令
1mkdir -p $HOME/.kube 2sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 3sudo chown $(id -u):$(id -g) $HOME/.kube/config 4$ kubectl get nodes
同时需要copy下 最后输出的kuadm join那段文字,如下
1$ kubeadm join 192.168.0.19:6443 --token esce21.q6hetwm8si29qxwn \ 2 --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
3.2 部署node节点
把刚刚copy 的kuadm join那段文字,粘贴到node节点执行
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
1kubeadm token create --print-join-command
3.3 部署CNI网络插件
如果不安装则集群间的网络会不通
1kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看是否安装完成
1kubectl get pods -n kube-system

出现图中红框(因为我有3个机器,所以是3个)且状态均为Running,则表示安装成功
使用get node查看节点信息
1kubectl get nodes

状态均为Ready,则表示K8S 集群安装成功
四、安装istio
首先 下载安装包,因为我们要安装1.5.1版本,所以需要指定版本
1curl -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 中
1vim /etc/profile 2### 将下面这个内容添加到文件末尾 3export PATH=$PATH:/root/istio-1.5.1/bin
之后就可以使用istioctl命令行工具了,该命令行工具具有用户输入校验功能,可以防止错误的安装和自定义选项。
我们使用demo的配置进行安装
1istioctl manifest apply --set profile=demo
安装命令运行成功后,检查 Kubernetes 服务是否部署正常,检查除 jaeger-agent 服务外的其他服务,是否均有正确的 CLUSTER-IP:
1$ kubectl get svc -n istio-system 2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 3grafana ClusterIP 10.108.112.31 <none> 3000/TCP 24s 4istio-egressgateway ClusterIP 10.106.157.7 <none> 80/TCP,443/TCP,15443/TCP 26s 5istio-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 6istio-pilot ClusterIP 10.110.196.147 <none> 15010/TCP,15011/TCP,15012/TCP,8080/TCP,15014/TCP,443/TCP 46s 7istiod ClusterIP 10.104.27.234 <none> 15012/TCP,443/TCP 46s 8jaeger-agent ClusterIP None <none> 5775/UDP,6831/UDP,6832/UDP 24s 9jaeger-collector ClusterIP 10.103.156.147 <none> 14267/TCP,14268/TCP,14250/TCP 24s 10jaeger-collector-headless ClusterIP None <none> 14250/TCP 24s 11jaeger-query ClusterIP 10.110.109.206 <none> 16686/TCP 24s 12kiali ClusterIP 10.96.182.125 <none> 20001/TCP 24s 13prometheus ClusterIP 10.104.167.86 <none> 9090/TCP 24s 14tracing ClusterIP 10.102.230.151 <none> 80/TCP 24s 15zipkin ClusterIP 10.111.66.10 <none> 9411/TCP 24s
检查相关 pod 是否部署成功:
1$ kubectl get pods -n istio-system 2NAME READY STATUS RESTARTS AGE 3grafana-5cc7f86765-jxdcn 1/1 Running 0 4m24s 4istio-egressgateway-598d7ffc49-bdmzw 1/1 Running 0 4m24s 5istio-ingressgateway-7bd5586b79-gnzqv 1/1 Running 0 4m25s 6istio-tracing-8584b4d7f9-tq6nq 1/1 Running 0 4m24s 7istiod-646b6fcc6-c27c7 1/1 Running 0 4m45s 8kiali-696bb665-jmts2 1/1 Running 0 4m24s 9prometheus-6c88c4cb8-xchzd 2/2 Running 0 4m24s
