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。登录以后,您需要完成一些一次性的配置。
打开浏览器,输入主机的 IP 地址:
https://<SERVER_IP>
请使用真实的主机 IP 地址替换
<SERVER_IP>
。首次登录时,请按照页面提示设置登录密码。
设置 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/ 可以看到管理面板