装置 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服务接口