装置 K8s v18.4
筹备两台机器,一台做master,一台做node
1.配置yum源(两台机器都做)
cd /etc/yum.repos.d/ rm -f \* curl -o CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo curl -o docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
2.装置docker并设置开启启动(两台机器都做)yum install -y docker-ce
systemctl enable docker && systemctl start docker
3.装置kubeadm并设置开启启动,实际上是会主动装置kubelet、kubeadm、kubectl三个(两台机器都做)yum install -y kubeadm
systemctl enable kubelet && systemctl start kubelet
4.初始化kubeadm(只在master机器执行),留神apiserver-advertise-address的ip改成本人的master节点ip,最好ping一下看看有没有通,复制最初的kubeadm join 192.168.71.60:6443 --token...后续会用到kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.71.60 --image-repository mirrorgcrio --service-cidr=10.1.0.0/16
这里有个很诡异的BUG,笔者已经困住这一步好几天,就是这个问题https://github.com/kubernetes...
新版本的移除了kubernetes-cni组件,然而新版本国内镜像较少,于是须要下老版本,然而老版本又说没有这个kubernetes-cni,导致很难堪。最初找到了个能用的镜像mirrorgcrio仓库终于下好了。
5.执行完下面命令后,依据输入提醒执行上面语句(只在master机器执行mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
6.装置网络插件(master)
下载文件
https://github.com/WillLiaowh...
执行文件kubectl apply -f kube-flannel.yml
7.将node退出集群,token要依据下面4步骤装置完的提醒(在node上操作)
kubeadm join 192.168.71.60:6443 --token y58e7a.c938uwuaz1fbeeys \ --discovery-token-ca-cert-hash sha256:fc18a5172423e70b915158ea34a2101284b3ee98c86cba79bcafadb691f75942
8.查看node,看到master节点和node节点都是ready就对了kubectl get node
部署微服务
这里笔者筹备了三个微服务,一个consumer,一个provider,一个eureka,目标是consumer和provider都注册进eureka,最初实现从consumer调起provider的接口。
通常将一个服务部署到k8s的流程是这样的:
1.用Maven打包成jar
2.生成docker镜像
3.将生成的镜像push到docker镜像库
4.用kubectl将镜像公布到K8S集群
这里笔者间接用eureka来举例,后续的consumer和provider都是一样的部署流程。
1.Maven打出一个微服务的可执行jar
2.生成docker镜像,首先编辑一个Dokerfile
FROM hub.c.163.com/library/java:latestADD cloud-eureka-server7001-1.0-SNAPSHOT.jar eureka7001.jarEXPOSE 7001ENTRYPOINT ["java", "-jar", "/eureka7001.jar"]
将jar和Dokerfile放在同一个层级目录,执行
docker build -t eureka7001:0.0.1 .
3.将生成的镜像push到docker镜像库,这里我用了阿里云的镜像服务,次要不便,不必搞那么多有的没的
步骤是
3.1.登录 docker login
3.2.改tag docker tag
3.3.push到镜像仓库 docker push
最终成果是这样:
4.用kubectl将镜像公布到K8s集群,首先编辑一个Deployment.yaml文件
apiVersion: apps/v1kind: Deploymentmetadata: name: eureka7001 labels: app: eureka7001spec: replicas: 1 selector: matchLabels: app: eureka7001 template: metadata: labels: app: eureka7001 spec: containers: - name: eureka7001 image: registry.cn-hangzhou.aliyuncs.com/willliaowh/eureka7001:0.0.1 ports: - containerPort: 7001---kind: ServiceapiVersion: v1metadata: name: eureka7001 labels: app: eureka7001spec: selector: app: eureka7001 ports: - port: 7001 targetPort: 7001 "Deployment.yaml" 38L, 620C
留神image要改成本人的镜像地址,而后执行以下命令kubectl apply -f Deployment.yaml
一切顺利的话能够执行上面命令,看到eureka曾经运行起来了kubectl get svc,deploy,pod
后续的consumer和provider都是一样的部署流程,要留神的是eureka的注册地址是kubectl get svc看到的CLUSTER-IP + Port,据说间接用服务名 + port也能够。
装置ingress
一切顺利的话三个服务应该都部署胜利
但当初问题是怎么拜访,这就须要用到ingress做一个反向代理拜访service。
1.下载文件,我曾经将配置调整好为hostNetwork形式拜访https://github.com/WillLiaowh...
2.执行命令kubectl apply -f mandatory.yaml
3.编辑一个test-ingress.yaml文件用来裸露服务
apiVersion: extensions/v1beta1kind: Ingressmetadata: name: test-ingressspec: rules: - host: liaowh.com http: paths: - path: /consumer backend: serviceName: consumer8007 servicePort: 8007 - path: / backend: serviceName: eureka7001 servicePort: 7001
4.执行命令kubectl apply -f test-ingress.yaml
5.编辑本人电脑的host文件,将node节点的ip和下面的host做一个映射,目标是为了在浏览器能间接拜访。
6.liaowh.com间接拜访到eureka主页,liaowh.com/consumer+接口名间接拜访到consumer服务下的接口继而拜访到provider服务接口