1. 經過RKE快速部署kubernetes集羣

圖片描述

前期準備

RKE:Ranchar Kubernetes Engine
https://github.com/rancher/rke
因爲RKE是由golang編寫,因此直接下載對應系統的二進制文件便可
下載地址: https://github.com/rancher/rk... node

1.建議使用Ubuntu 16.04.3 LTS版本;若是使用CentOS 7,建議7.3以上版本
2.各主機的hostname主機名必須不一樣!
3.hosts文件設置:/etc/hosts要配置正確,必定要有127.0.0.1 localhost 這一項;hosts文件中包含全部主機節點的IP和名稱列表。linux

Docker

經過Rancher提供的腳本進行安裝(如下是最新支持的docker版本)nginx

Docker版本 安裝腳本
18.09.2 curl https://releases.rancher.com/... | sh
18.06.2 curl https://releases.rancher.com/... | sh
17.03.2 curl https://releases.rancher.com/... | sh

設置docker用戶組

RKE經過SSH tunnel進行安裝部署,須要事先創建RKE到各節點的SSH免密登陸。若是集羣中有3個節點,須要在RKE機器上執行1遍祕鑰生成命令ssh-keygen,並將生成側公鑰經過分發命令:ssh-copy-id {user}@{ip}。git

在各個節點上建立ssh用戶,並將其添加至docker組中:github

useradd dockeruser
usermod -aG docker dockeruser
注意:重啓系統之後才能生效,只重啓Docker服務是不行的!重啓後,docker_user用戶也能夠直接使用docker run命令。

關閉Selinux

Ubuntu 16.04默認未安裝,無需設置。golang

1)CentOS7下可修改配置文件web

vi /etc/sysconfig/selinux

2)設置 SELINUX=disabled,重啓後永久關閉。docker

設置IPV4轉發

必須開啓!Ubuntu 16.04下默認已啓用,無需設置。api

1)CentOS7 下可編輯配置文件:dom

vi /etc/sysctl.conf

2)設置:

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

3)執行以下命令生效:

sudo sysctl -p

設置防火牆策略

開放集羣主機節點之間644三、237九、2380端口,若是是剛開始試用,能夠先關閉防火牆;

systemctl stop firewalld

Ubuntu默認未啓用UFW防火牆,無需設置。也可手工關閉:sudo ufw disable

禁用Swap

必定要禁用swap,不然kubelet組件沒法運行。
1)永久禁用swap
能夠直接修改

vi /etc/fstab

文件,註釋掉swap項。
2)臨時禁用

swapoff -a

啓用cgroup

修改配置文件/etc/default/grub,啓用cgroup內存限額功能,配置兩個參數:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

注意:要執行sudo update-grub 更新grub,而後重啓系統後生效。
CentOS下執行:

grub2-mkconfig -o /boot/grub2/grub.cfg

設置SSH

1)在rke所在主機上建立密鑰:

ssh-keygen

2)將所生成的密鑰的公鑰分發到各個節點:

ssh-copy-id dockeruser@xxx.xxx.xx.xx
...

編寫 cluster.yml

能夠輸入命令rke_drawin-amd64 config(我本機是mac,因此使用drawin-amd64版本),跟着引導完成基礎配置
配置完成後將會在當前目錄下出現一個 cluster.yml
下面是該配置文件的內容(這裏我配置的是包含兩個節點的k8s集羣,其中一個master,rke很容易支持HA部署,僅僅須要在配置文件中對多個節點指定role.controlplane便可)

nodes:
- address: xxx.xxx.xxx.xxx
  port: "22"
  internal_address: ""
  role:
  - controlplane
  - worker
  - etcd
  hostname_override: master
  user: dockeruser
  docker_socket: /var/run/docker.sock
  labels: {}
- address: xxx.xxx.xxx.xxx
  port: "22"
  internal_address: ""
  role:
  - worker
  hostname_override: node-1
  user: dockeruser
  docker_socket: /var/run/docker.sock
  ssh_key: ""
  ssh_key_path: ""
  ssh_cert: ""
  ssh_cert_path: ""
  labels: {}
services:
  etcd:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    external_urls: []
    ca_cert: ""
    cert: ""
    key: ""
    path: ""
    snapshot: null
    retention: ""
    creation: ""
    backup_config: null
  kube-api:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    service_cluster_ip_range: 10.43.0.0/16
    service_node_port_range: ""
    pod_security_policy: false
    always_pull_images: false
  kube-controller:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    cluster_cidr: 10.42.0.0/16
    service_cluster_ip_range: 10.43.0.0/16
  scheduler:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
  kubelet:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    cluster_domain: cluster.local
    infra_container_image: ""
    cluster_dns_server: 10.43.0.10
    fail_swap_on: false
  kubeproxy:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
network:
  plugin: flannel
  options: {}
authentication:
  strategy: x509
  sans: []
  webhook: null
addons: ""
addons_include: []
system_images:
  etcd: rancher/coreos-etcd:v3.3.10-rancher1
  alpine: rancher/rke-tools:v0.1.42
  nginx_proxy: rancher/rke-tools:v0.1.42
  cert_downloader: rancher/rke-tools:v0.1.42
  kubernetes_services_sidecar: rancher/rke-tools:v0.1.42
  kubedns: rancher/k8s-dns-kube-dns:1.15.0
  dnsmasq: rancher/k8s-dns-dnsmasq-nanny:1.15.0
  kubedns_sidecar: rancher/k8s-dns-sidecar:1.15.0
  kubedns_autoscaler: rancher/cluster-proportional-autoscaler:1.3.0
  coredns: rancher/coredns-coredns:1.3.1
  coredns_autoscaler: rancher/cluster-proportional-autoscaler:1.3.0
  kubernetes: rancher/hyperkube:v1.14.6-rancher1
  flannel: rancher/coreos-flannel:v0.10.0-rancher1
  flannel_cni: rancher/flannel-cni:v0.3.0-rancher1
  calico_node: rancher/calico-node:v3.4.0
  calico_cni: rancher/calico-cni:v3.4.0
  calico_controllers: ""
  calico_ctl: rancher/calico-ctl:v2.0.0
  canal_node: rancher/calico-node:v3.4.0
  canal_cni: rancher/calico-cni:v3.4.0
  canal_flannel: rancher/coreos-flannel:v0.10.0
  weave_node: weaveworks/weave-kube:2.5.0
  weave_cni: weaveworks/weave-npc:2.5.0
  pod_infra_container: rancher/pause:3.1
  ingress: rancher/nginx-ingress-controller:0.21.0-rancher3
  ingress_backend: rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1
metrics_server: rancher/metrics-server:v0.3.1
ssh_key_path: ~/.ssh/id_rsa
ssh_cert_path: ""
ssh_agent_auth: true
authorization:
  mode: rbac
  options: {}
ignore_docker_version: false
kubernetes_version: ""
private_registries: []
ingress:
  provider: ""
  options: {}
  node_selector: {}
  extra_args: {}
cluster_name: ""
cloud_provider:
  name: ""
prefix_path: ""
addon_job_timeout: 0
bastion_host:
  address: ""
  port: ""
  user: ""
  ssh_key: ""
  ssh_key_path: ""
  ssh_cert: ""
  ssh_cert_path: ""
monitoring:
  provider: ""
  options: {}
restore:
  restore: false
  snapshot_name: ""
dns: null

安裝Kubernetes

rke_drawin-amd64 up

能夠看到腳本開始輸入一些日誌信息
最終出現

Finished building Kubernetes cluster successfully

則表示集羣安裝成功。

驗證

集羣安裝成功後,RKE會在當前目錄建立一個kube_config_cluster.yml文件,這個文件就是kubeconfig文件

默認狀況下,kube配置文件被稱爲.kube_config_cluster.yml。將這個文件複製到你的本地~/.kube/config,就能夠在本地使用kubectl了。

須要注意的是,部署的本地kube配置名稱是和集羣配置文件相關的。例如,若是您使用名爲mycluster.yml的配置文件,則本地kube配置將被命名爲.kube_config_mycluster.yml。

export KUBECONFIG=./kube_config_cluster.yml
kubectl get node
NAME     STATUS   ROLES                      AGE     VERSION
master   Ready    controlplane,etcd,worker   6m27s   v1.14.6
node-1   Ready    worker                     6m5s    v1.14.6

看到節點信息代表安裝成功

添加或刪除節點

RKE支持爲角色爲worker和controlplane的主機添加或刪除節點。
1)添加節點:
要添加其餘節點,只須要更新具備其餘節點的集羣配置文件,並使用相同的文件運行集羣配置便可。
2)刪除節點:
要刪除節點,只需從集羣配置文件中的節點列表中刪除它們,而後從新運行rke up命令。

高可用

RKE工具是知足高可用的。您能夠在集羣配置文件中指定多個控制面板主機,RKE將在其上部署主控組件。
默認狀況下,kubelets被配置爲鏈接到nginx-proxy服務的地址——127.0.0.1:6443,該代理會向全部主節點發送請求。
要啓動HA集羣,只需使用controlplane角色指定多個主機,而後正常啓動集羣便可。

刪除集羣

RKE支持rke remove命令。該命令執行如下操做:
鏈接到每一個主機並刪除部署在其上的Kubernetes服務。
從服務所在的目錄中清除每一個主機:

  • /etc/kubernetes/ssl
  • /var/lib/etcd
  • /etc/cni
  • /opt/cni

請注意,這個命令是不可逆的,它將完全摧毀Kubernetes集羣。

安裝中可能遇到的問題

ssh: handshake failed: ssh: unable to authenticate, attempted methods [publickey none], no supported methods remain

請檢查配置文件中配置的用戶是否可使用指定的私鑰登陸機器

相關文章
相關標籤/搜索