Rancher高可用搭建

我不是女神ヾ 2022-10-30 13:22 360阅读 0赞

初始化系统

每台机器都要操作

  1. # 关闭防火墙
  2. systemctl stop firewalld.service
  3. systemctl disable firewalld
  4. firewall-cmd --reload
  5. # 关闭selinux
  6. setenforce 0 # 临时
  7. sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
  8. # 关闭swap
  9. swapoff -a # 临时
  10. sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
  11. # 将桥接的IPv4流量传递到iptables的链
  12. cat > /etc/sysctl.d/k8s.conf << EOF
  13. net.bridge.bridge-nf-call-ip6tables = 1
  14. net.bridge.bridge-nf-call-iptables = 1
  15. EOF
  16. sysctl --system # 生效
  17. #安装chrony
  18. yum -y install chrony
  19. #修改同步服务器地址为阿里云
  20. sed -i.bak '3,6d' /etc/chrony.conf && sed -i '3cserver ntp1.aliyun.com iburst' \
  21. /etc/chrony.conf
  22. # 启动chronyd及加入开机自启
  23. systemctl start chronyd && systemctl enable chronyd
  24. #查看同步结果
  25. chronyc sources

安装docker

每台机器都要操作

  1. # 下载docker压缩包
  2. https://download.docker.com/linux/static/stable/x86_64/docker-19.03.11.tgz
  3. # 解压二进制包、移动加压文件
  4. tar zxvf docker-19.03.11.tgz
  5. mv docker/* /usr/bin
  6. # systemd管理docker
  7. cat > /usr/lib/systemd/system/docker.service << EOF
  8. [Unit]
  9. Description=Docker Application Container Engine
  10. Documentation=https://docs.docker.com
  11. After=network-online.target firewalld.service
  12. Wants=network-online.target
  13. [Service]
  14. Type=notify
  15. ExecStart=/usr/bin/dockerd
  16. ExecReload=/bin/kill -s HUP $MAINPID
  17. LimitNOFILE=infinity
  18. LimitNPROC=infinity
  19. LimitCORE=infinity
  20. TimeoutStartSec=0
  21. Delegate=yes
  22. KillMode=process
  23. Restart=on-failure
  24. StartLimitBurst=3
  25. StartLimitInterval=60s
  26. [Install]
  27. WantedBy=multi-user.target
  28. EOF
  29. #创建配置文件
  30. mkdir /etc/docker
  31. cat > /etc/docker/daemon.json << EOF
  32. {
  33. "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  34. "insecure-registries": ["172.18.69.205:80"],
  35. "log-opts": {"max-size":"2g", "max-file":"100"}
  36. }
  37. EOF
  38. #启动并设置开机启动
  39. systemctl daemon-reload
  40. systemctl start docker
  41. systemctl enable docker

新增rancher操作用户

每台机器都要操作

  1. 新建用户
  2. groupadd docker
  3. useradd rancher -G docker
  4. #设置es用户的密码为5W3R1gjHfg
  5. passwd rancher
  6. vi /etc/sudoers
  7. # 增加一行记录
  8. rancher ALL=(ALL) NOPASSWD: ALL
  9. # 生效
  10. sysctl --system

选择一台机器特色处理

选择一台机器安装rke,kubectl,helm,对其他机器免密登录

  1. # 免密登录
  2. su - rancher
  3. ssh-keygen
  4. ssh-copy-id rancher@外网ip1
  5. ssh-copy-id rancher@外网ip2
  6. ssh-copy-id rancher@外网ip3
  7. # root用户下,执行如下操作:
  8. # 1、下载rke文件并移动到/usr/sbin
  9. wget https://github.com/rancher/rke/releases/download/v1.1.2/rke_linux-amd64 \
  10. && chmod +x rke_linux-amd64 \
  11. && mv rke_linux-amd64 /usr/bin/rke
  12. # 2、安装kubectl
  13. wget https://docs.rancher.cn/download/kubernetes/linux-amd64-v1.18.3-kubectl \
  14. && chmod +x linux-amd64-v1.18.3-kubectl \
  15. && mv linux-amd64-v1.18.3-kubectl /usr/bin/kubectl
  16. # 3、安装helm
  17. wget https://docs.rancher.cn/download/helm/helm-v3.0.3-linux-amd64.tar.gz \
  18. && tar xf helm-v3.0.3-linux-amd64.tar.gz \
  19. && cd linux-amd64 \
  20. && mv helm /usr/sbin/

在/home/rancher目录设置rancher-cluster.yml配置文件

  1. nodes:
  2. - address: ip地址
  3. internal_address: ip地址
  4. user: rancher
  5. role: [controlplane, worker, etcd]
  6. port: 22
  7. - address: ip地址
  8. internal_address: ip地址
  9. user: rancher
  10. role: [controlplane, worker, etcd]
  11. port: 22
  12. - address: ip地址
  13. internal_address: ip地址
  14. user: rancher
  15. role: [controlplane, worker, etcd]
  16. port: 22
  17. services:
  18. etcd:
  19. snapshot: true
  20. creation: 6h
  21. retention: 24h
  22. ignore_docker_version: true
  23. cluster_name: mycluster
  24. ingress:
  25. provider: nginx
  26. options:
  27. use-forwarded-headers: "true"

rke部署k8s

  1. rancher用户下执行:
  2. cd /home/rancher
  3. rke up --config ./rancher-cluster.yml
  4. # 新生成的集群文件,用来执行kubectl
  5. mkdir -p /home/rancher/.kube
  6. cp kube_config_rancher-cluster.yml $HOME/.kube/config
  7. # 检查
  8. kubectl get nodes
  9. kubectl get pods --all-namespaces

安装 cert-manager

  1. # 安装 CustomResourceDefinition 资源
  2. kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml
  3. # **重要:**
  4. # 如果您正在运行 Kubernetes v1.15 或更低版本,
  5. # 则需要在上方的 kubectl apply 命令中添加`--validate=false`标志,
  6. # 否则您将在 cert-manager 的 CustomResourceDefinition 资源中收到与
  7. # x-kubernetes-preserve-unknown-fields 字段有关的验证错误。
  8. # 这是一个良性错误,是由于 kubectl 执行资源验证的方式造成的。
  9. # 为 cert-manager 创建命名空间
  10. kubectl create namespace cert-manager
  11. # 添加 Jetstack Helm 仓库
  12. helm repo add jetstack https://charts.jetstack.io
  13. # 更新本地 Helm chart 仓库缓存
  14. helm repo update
  15. # 安装 cert-manager Helm chart
  16. helm install \
  17. cert-manager jetstack/cert-manager \
  18. --namespace cert-manager \
  19. --version v0.15.0

安装完 cert-manager 后,您可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署:

  1. kubectl get pods --namespace cert-manager
  2. NAME READY STATUS RESTARTS AGE
  3. cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
  4. cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
  5. cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m

通过helm安装 Rancher

  1. # 添加helm仓库
  2. helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
  3. # 创建命名空间
  4. kubectl create namespace cattle-system
  5. helm install rancher rancher-stable/rancher \
  6. --namespace cattle-system \
  7. --set hostname=rancher.demo.com
  8. kubectl -n cattle-system rollout status deploy/rancher
  9. kubectl -n cattle-system get deploy rancher

新增nginx

  1. docker pull nginx:1.15
  2. mkdir -p /opt/nginx/cert
  3. # 生成证书
  4. cd /opt/nginx/cert
  5. chmod +x create_self-signed-cert.sh
  6. ./create_self-signed-cert.sh --ssl-domain=demo.jmj1995.com --ssl-trusted-ip=8.129.116.194 --ssl-size=2048 --ssl-date=3650
  7. docker run --name nginx01 -d -p 80:80 -p 443:443 nginx:1.15
  8. docker cp nginx01:/etc/nginx /opt
  9. docker rm -f nginx01
  10. docker exec -it nginx01 /bin/bash
  11. # 修改default.conf
  12. upstream rancher {
  13. server 8.129.69.137:80;
  14. server 8.129.145.169:80;
  15. server 8.129.115.152:80;
  16. }
  17. map $http_upgrade $connection_upgrade {
  18. default Upgrade;
  19. '' close;
  20. }
  21. server {
  22. listen 443 ssl http2;
  23. server_name rancher.jmj1995.com;
  24. ssl_certificate /etc/nginx/cert/tls.crt;
  25. ssl_certificate_key /etc/nginx/cert/tls.key;
  26. location / {
  27. proxy_set_header Host $host;
  28. proxy_set_header X-Forwarded-Proto $scheme;
  29. proxy_set_header X-Forwarded-Port $server_port;
  30. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  31. proxy_pass http://rancher;
  32. proxy_http_version 1.1;
  33. proxy_set_header Upgrade $http_upgrade;
  34. proxy_set_header Connection $connection_upgrade;
  35. # 这里将允许您在 Rancher UI 中打开命令行窗口时,窗口可以保留最多15分钟。没有这个参数时,默认值为1分钟,一分钟后在Rancher>中的shell会自动关闭。
  36. proxy_read_timeout 900s;
  37. proxy_buffering off;
  38. }
  39. }
  40. server {
  41. listen 80;
  42. server_name rancher.jmj1995.com;
  43. return 301 https://$server_name$request_uri;
  44. }
  45. # 运行nginx
  46. docker run -it -d --name mynginx -p 80:80 -p 443:443 -v /opt/nginx/:/etc/nginx/ -v /opt/nginx/logs:/var/log/nginx nginx:1.15

发表评论

表情:
评论列表 (有 0 条评论,360人围观)

还没有评论,来说两句吧...

相关阅读