Kubernetes - 使用Rancher部署K8S集群

Kubernetes - 使用Rancher部署K8S集群

准备Linux主机

首先配置三台节点,均在内网,可以互相通信

Node Address Specs
k8s-1 172.0.102.230 8 GB/4 CPUs/150 GB
k8s-2 172.0.102.231 8 GB/4 CPUs/150 GB
k8s-3 172.0.102.232 8 GB/4 CPUs/150 GB

初始化工作,在每台节点上执行:

sudo apt-get -y update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -y update
sudo apt-get -y install docker-ce

安装管理节点

安装只需要一条命令,在k8s-1节点上执行:

fix:2020年12月28日,新版本修改了启动命令,需要加上--privileged参数,否则会报错ERROR: Rancher must be ran with the --privileged flag when running outside of Kubernetes

sudo docker run -d --restart=unless-stopped --privileged -p 80:80 -p 443:443 rancher/rancher

登录 Rancher 界面并配置初始设置

您需要先登录 Rancher,然后再开始使用 Rancher。登录以后,您需要完成一些一次性的配置。

  1. 打开浏览器,输入主机的 IP 地址:https://<SERVER_IP>

    请使用真实的主机 IP 地址替换 <SERVER_IP>

  2. 首次登录时,请按照页面提示设置登录密码。

  3. 设置 Rancher Server URL。URL 既可以是一个 IP 地址,也可以是一个主机名称。请确保您在集群内添加的每个节点都可以连接到这个 URL。如果您使用的是主机名称,请保证主机名称可以被节点的 DNS 服务器成功解析。

结果:完成 Rancher 管理员用户的密码设置和访问地址设置。下次使用 Rancher 时,可以输入 IP 地址或主机地址访问 Rancher 界面,然后输入管理员用户名admin和您设置的密码登录 Rancher 界面。

这里我们输入的是k8s-1的内网地址http://172.0.102.230

设置管理员密码 设置管理地址

按照提示,我们依次在另外两个节点上执行:

sudo docker run -d --privileged \
	--restart=unless-stopped \
	--net=host \
	-v /etc/kubernetes:/etc/kubernetes \
	-v /var/run:/var/run rancher/rancher-agent:v2.4.8 \
	--server https://172.0.102.230 \
	--token 987tvlx76d4s58x2md7rwsxjxzspjgrwjgwdn8shlmhc26mxskrknk \
	--ca-checksum 53ff4ee58b36a39bde2ff421736a2946ddd26ea37e2a6ec22f54743e69a9b4b4 \
	--etcd \
	--controlplane \
	--worker

现在我们有一个两节点的集群了,我们可以在集群管理找到Kubeconfig文件,配置到本地~/.kube/config就可以愉快的开始使用kubectl了。

$ kubectl cluster-info
Kubernetes master is running at https://172.0.102.230/k8s/clusters/c-jzfnr
CoreDNS is running at https://172.0.102.230/k8s/clusters/c-jzfnr/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.43.0.1    <none>        443/TCP   5h10m

部署一个springboot项目

新建一个springboot项目:

$ tree
.
├── deployment.yml
├── Dockerfile
├── hello-k8s.iml
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── hellok8s
        │               ├── HelloController.java
        │               └── HelloK8sApplication.java
        └── resources
            ├── application.properties
            ├── static
            └── templates

Dockerfile

FROM openjdk:11

WORKDIR /code
COPY target/hello-k8s-0.0.1-SNAPSHOT.jar .
EXPOSE 8080
CMD ["java", "-jar", "hello-k8s-0.0.1-SNAPSHOT.jar"]

编译发布镜像:

./mvnw clean package
docker build -t hirosyu/hello-k8s .
docker push hirosyu/hello-k8s

YAML文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: hello-k8s
  name: hello-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-k8s
  strategy: {}
  template:
    metadata:
      labels:
        app: hello-k8s
    spec:
      containers:
      - image: hirosyu/hello-k8s
        name: hello-k8s
        resources: {}
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: hello-k8s
  name: hello-k8s
spec:
  ports:
  - name: 8080-8080
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: hello-k8s
  type: ClusterIP

创建pod

kubectl apply -f deployment.yml
# 为了查看效果,我们使用那个kubectl port-forward将端口转发到本地
kubectl port-forward svc/hello-k8s 8080:8080

现在打开浏览器http://127.0.0.1:8080/version可查看到返回结果

代码可以在 https://github.com/hiro93/hello-k8s 找到

Traefik v2

Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。

使用helm安装,默认的仓库是v1.7的,这里使用traefik自己的源:

helm repo add traefik https://containous.github.io/traefik-helm-chart
helm repo update
kubectl create ns traefik-v2
helm install --namespace=traefik-v2 traefik traefik/traefik

使用端口转发查看dashboard:

kubectl port-forward $(kubectl get pods --namespace=traefik-v2 --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000

打开浏览器打开 http://127.0.0.1:9000/dashboard/ 可以看到管理面板

image-20200918182536383

image-20200918182423211

posted @ 2020-09-18 15:22  HiroSyu  阅读(2470)  评论(0编辑  收藏  举报