rke部署k8s_v1.20.15高可用
Rancher Kubernetes Engine,簡稱 RKE,是一個經(jīng)過 CNCF 認證的 Kubernetes 安裝程序。RKE 支持多種操作系統(tǒng),包括 MacOS、Linux 和 Windows,可以在裸金屬服務器(BMS)和虛擬服務器(Virtualized Server)上運行。
市面上的其他 Kubernetes 部署工具存在一個共性問題:在使用工具之前需要滿足的先決條件比較多,例如,在使用工具前需要完成安裝 kubelet、配置網(wǎng)絡等一系列的繁瑣操作。而 RKE 簡化了部署 Kubernetes 集群的過程,只有一個先決條件:只要您使用的 Docker 是 RKE 支持的版本,就可以通過 RKE 安裝 Kubernetes,部署和運行 Kubernetes 集群。RKE 既可以單獨使用,作為創(chuàng)建 Kubernetes 集群的工具,也可以配合 Rancher2.x 使用,作為 Rancher2.x 的組件,在 Rancher 中部署和運行 Kubernetes 集群。
部署kubernetes集群
以部署3master 1node高可用kubernetes集群為例,后續(xù)node節(jié)點可以添加。
1.主機配置:
| 主機ip | 主機名 | 配置 | 角色 |
| 192.168.2.90 | master1 | 4核8G | controlplane,etcd,worker |
| 192.168.2.91 | master2 | 4核8G | controlplane,etcd,worker |
| 192.168.2.92 | master3 | 4核8G | controlplane,etcd,worker |
| 192.168.2.93 | worker1 | 4核8G | controlplane,etcd,worker |
1.1 所有主機初始化(可腳本化)
安裝必要的軟件包
yum -y install epel-release yum -y install lrzsz vim gcc glibc openssl openssl-devel net-tools wget curl yum -y update # 更新一下軟件包版本和內(nèi)核版本 yum -y install ntp systemctl start ntpd # 啟動時鐘同步服務 systemctl enable ntpd # 設(shè)置開機啟動 ntpq -p # 查看時鐘同步狀態(tài)1.2 安全設(shè)置
關(guān)閉防火墻(原因:k8s不關(guān)閉會出現(xiàn)各種問題Installing kubeadm | Kubernetes)
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s@SELINUX=enforcing@SELINUX=disabled@g /etc/selinux/configswapoff -a swapoff -a#關(guān)閉swap分區(qū)1.3 內(nèi)核調(diào)優(yōu)
cat >> /etc/sysctl.conf <<EOF vm.swappiness=0 net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.neigh.default.gc_thresh1=4096 net.ipv4.neigh.default.gc_thresh2=6144 net.ipv4.neigh.default.gc_thresh3=8192 EOF執(zhí)行生效
modprobe br_netfilter # 要先執(zhí)行這個命令,要不然會報錯 sysctl -p加載ipvs相關(guān)模塊
cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF#執(zhí)行腳本 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4上面腳本創(chuàng)建了/etc/sysconfig/modules/ipvs.modules文件,保證在節(jié)點重啟后能自動加載所需模塊。 使用
lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已經(jīng)正確加載所需的內(nèi)核模塊。
接下來還需要確保各個節(jié)點上已經(jīng)安裝了ipset軟件包。 為了便于查看ipvs的代理規(guī)則,最好安裝一下管理工具ipvsadm。
1.4hostname修改
hostnamectl set-hostname master1 hostnamectl set-hostname master2 hostnamectl set-hostname master3 hostnamectl set-hostname worker11.5 在/etc/hosts文件中添加配置
cat >> /etc/hosts << EOF 192.168.2.90 master1 192.168.2.91 master2 192.168.2.92 master3 192.168.2.93 worker1 EOF1.6 在每臺主機上安裝docker
配置docker信任倉庫,指定鏡像源,修改docker cgroup driver為systemd,根據(jù)文檔CRI installation中的內(nèi)容,對于使用systemd作為init system的Linux的發(fā)行版,使用systemd作為docker的cgroup driver可以確保服務器節(jié)點在資源緊張的情況更加穩(wěn)定,因此這里修改各個節(jié)點上docker的cgroup driver為systemd
mkdir /etc/docker/ cat <<EOF > /etc/docker/daemon.json {"registry-mirrors": ["https://lishanbin.demo.cn:443"],"exec-opts": ["native.cgroupdriver=systemd"] } EOF systemctl restart docker systemctl status docker # 確認docker是否正常啟動 docker info # 確認鏡像源配置是否生效因rke不支持root部署k8s集群,配置普通用戶加入docker組把master1主機當做主控機,其它主機的app用戶互信它的app用戶。
useradd app usermod -G docker app mkdir -pv /home/app/.ssh/ chmod 700 /home/app/.ssh/ chown -R app.app /home/app/ chmod 600 /home/app/.ssh/authorized_keys vim /home/app/.ssh/authorized_keys # 添加第一個節(jié)點的密鑰測試用ssh連接。從nginx主機上,通過ops用戶都能正常ssh連接到三臺要部署k8s的主機。
2. 使用rke部署k8s集群
部署操作在master1上操作即可
2.1下載rke
rke支持的k8s版本:
su - app wget https://github.com/rancher/rke/releases/tag/v1.3.7 #檢查支持的版本 ./rke config --system-images --all |grep hyperkube2.2編寫配置文件(./rke_linux-amd64 config生成也行)
vim cluster.yml
nodes:- address: 192.168.2.90user: approle:- controlplane- etcdssh_key_path: ~/.ssh/id_rsaport: 22- address: 192.168.2.91user: approle:- workerssh_key_path: ~/.ssh/id_rsaport: 22- address: 192.168.2.92user: approle:- workerssh_key_path: ~/.ssh/id_rsaport: 22- address: 192.168.2.93user: approle:- workerssh_key_path: ~/.ssh/id_rsaport: 22 network:plugin: calicoignore_docker_version: trueprivate_registries:- url: lishanbin.demo.cn:443user: adminpassword: xxxis_default: true#kubernetes_version: v1.13.5-rancher1-3system_images:etcd: lishanbin.demo.cn:443/rancher/mirrored-coreos-etcd:v3.4.15-rancher1alpine: lishanbin.demo.cn:443/rancher/rke-tools:v0.1.78nginx_proxy: lishanbin.demo.cn:443/rancher/rke-tools:v0.1.78cert_downloader: lishanbin.demo.cn:443/rancher/rke-tools:v0.1.78kubernetes: lishanbin.demo.cn:443/rancher/hyperkube:v1.20.12-rancher1kubernetes_services_sidecar: lishanbin.demo.cn:443/rancher/rke-tools:v0.1.78pod_infra_container: lishanbin.demo.cn:443/rancher/mirrored-pause:3.2# CoreDNS imagescoredns: lishanbin.demo.cn:443/rancher/mirrored-coredns-coredns:1.8.0coredns_autoscaler: lishanbin.demo.cn:443/rancher/mirrored-cluster-proportional-autoscaler:1.8.1# Calico imagescalico_node: lishanbin.demo.cn:443/rancher/mirrored-calico-node:v3.17.2calico_cni: lishanbin.demo.cn:443/rancher/mirrored-calico-cni:v3.17.2calico_controllers: lishanbin.demo.cn:443/rancher/mirrored-nginx-ingress-controller-defaultbackend:1.5-rancher1calico_ctl: lishanbin.demo.cn:443/rancher/mirrored-calico-ctl:v3.17.2calico_flexvol: lishanbin.demo.cn:443/rancher/mirrored-calico-pod2daemon-flexvol:v3.17.2# Ingress controller images#ingress: lishanbin.demo.cn:443/library/nginx-ingress-controller:0.21.0-rancher3#ingress_backend: lishanbin.demo.cn:443/library/nginx-ingress-controller-defaultbackend:1.4-rancher1# Metrics server imagemetrics_server: lishanbin.demo.cn:443/rancher/mirrored-metrics-server:v0.4.1services:etcd:snapshot: truecreation: 5m0sretention: 24hkube-api:service_cluster_ip_range: 10.214.0.0/16always_pull_images: falsepod_security_policy: falsesecrets_encryption_config:enabled: falseservice_node_port_range: 30000-32767extra_args:feature-gates: 'RemoveSelfLink=false'kubeproxy:extra_args:proxy-mode: ipvsmasquerade-all: trueextra_binds:- "/usr/lib/modules:/tmp/modules"kube-controller:cluster_cidr: 10.213.0.0/16service_cluster_ip_range: 10.214.0.0/16kubelet:cluster_domain: cluster.localcluster_dns_server: 10.214.0.10fail_swap_on: falseextra_args:max-pods: 250authentication:strategy: "x509"sans:- "192.168.216.222" dns:provider: coredns authorization:mode: rbacaddon_job_timeout: 30ingress:provider: nginxhostnetwork: trueaddons: "" addons_include: []中間其實有一些是需要修改的,比如etcd的備份周期,備份保留時間,ingress是否安裝等等,具體參數(shù)參考:
官方示例配置
創(chuàng)建了cluster.yml文件后,您可以運行以下命令部署集群。這條命令默認cluster.yml已經(jīng)保存在了您運行命令所處的路徑下。
rke upINFO[0000] Building Kubernetes cluster INFO[0000] [dialer] Setup tunnel for host [10.0.0.1] INFO[0000] [network] Deploying port listener containers INFO[0000] [network] Pulling image [alpine:latest] on host [10.0.0.1] ... INFO[0101] Finished building Kubernetes cluster successfully運行如上圖后k8s集群即部署完成,kubectl get nodes 查看
[app@master1 work]$ kubectl get nodes NAME STATUS ROLES AGE VERSION 192.168.2.90 Ready controlplane,etcd 1d v1.20.15 192.168.2.91 Ready controlplane,etcd 1d v1.20.15 192.168.2.92 Ready controlplane,etcd 1d v1.20.15 192.168.2.93 Ready worker 1d v1.20.15請保存下文中列出來的所有文件,這些文件可以用于維護集群,排查問題和升級集群。
cluster.yml:RKE 集群的配置文件。
kube_config_cluster.yml:該集群的Kubeconfig 文件包含了獲取該集群所有權(quán)限的認證憑據(jù)。
cluster.rkestate:Kubernetes 集群狀態(tài)文件,包含了獲取該集群所有權(quán)限的認證憑據(jù),使用 RKE v0.2.0 時才會創(chuàng)建這個文件。
kube_config_cluster.yml和cluster.rkestate兩個文件的名稱取決于您如何命名 RKE 集群配置文件,如果您修改的集群配置文件的名稱,那么后兩個文件的名稱可能會跟上面列出來的文件名稱不一樣。
總結(jié)
以上是生活随笔為你收集整理的rke部署k8s_v1.20.15高可用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《大道至简》的幕后故事(2):“愚公移山
- 下一篇: 如何关闭或启动mysql服务