使用kubeadm安裝Kubernetes

(1)系統基礎設置

  • 經過DNS完成各節點的主機名解析,少許時可使用hosts文件進行解析;node

  • 藉助於NTP服務設置各節點時間精確同步linux

  • 關閉各節點iptables和firewalld,並確保禁止開機自啓動git

  • 各節點禁用SELinuxgithub

  • 各節點禁用全部Swap設備docker

  • 若要使用ipvs模型的proxy,各節點還須要載入ipvs相關的各模塊vim

1.1 設置主機名

每臺主機名必須都不同,並保證全部節點之間能夠經過hostname相互訪問。centos

 # 查看主機名
 hostname
 # 修改主機名
 hostnamectl set-hostname HostName
 # 配置hosts文件,使其全部節點之間能夠經過hostname相互訪問
 vim /etc/hosts
  NodeIP   NodeName
1.2 設置時鐘同步
 # 若是節點可直接訪問互聯網,可直接啓動chronyd系統服務,並設置開機自啓動
  systemctl start chronyd.service
  systemctl enable chronyd.service
 # 建議使用本地的時間服務器,尤爲在節點數量衆多時,存在可用的本地時間服務器時,修改節點時間服務器指向相應的主機便可,配置【/etc/chrony.conf】格式以下:
  server CHRONY-ServerName-OR-IP iburst
 #設置時區
    timedatectl list-timezones|grep -i Shanghai
    timedatectl set-timezone Asia/Shanghai
    timedatectl
 

 

1.3 安裝依賴包
 # 注意jq在EPEL源中
 # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
1.4 關閉防火牆、swap、重置iptables
 # 關閉防火牆
 systemctl stop firewalld && systemctl disable firewalld
 # 重置iptables
 iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
 # 關閉swap
 # kubeadm默認會預先檢查當前主機是否禁用了Swap設備,並在未禁用時強制終止部署過程。
 swapoff -a
 sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
 # 關閉SELinux
 setenforce 0
 sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
 # 關閉dnsmasq(不然可能致使docker容器沒法解析域名)
 service dnsmasq stop && systemctl disable dnsmasq
1.5 系統參數設置
  cat > /etc/sysctl.d/kubernetes.conf <<EOF
 net.bridge.bridge-nf-call-iptables=1
 net.bridge.bridge-nf-call-ip6tables=1
 net.ipv4.ip_forward=1
 vm.swappiness=0
 vm.overcommit_memory=1
 vm.panic_on_oom=0
 fs.inotify.max_user_watches=89100
 EOF
 ## 生效文件
 sysctl -p /etc/sysctl.d/kubernetes.conf
 ## 查看
 sysctl -a |grep bridge

 

(2) 安裝docker(全部節點)

根據kubernetes對docker版本的兼容測試狀況選擇對應docker版本。api

 wget -O /etc/yum.repos.d/docker.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 yum install docker-ce
 systemctl enable docker
 
 # 配置iptables轉發策略默認放行
  # docker自1.13版起會自動設置iptables的FORWARD默認策略爲DROP,這可能會影響kubernetes集羣依賴的報文轉發功能。
 vim /usr/lib/systemd/system/docker.service
  # 在【Service】標籤下
  Environment=「HTTPS_PROXY=http://www.ik8s.io:10070」
  Environment=「NO_PROXY=127.0.0.0/8,192.168.141.0/24」
  ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
 # 重啓生效
 systemctl daemon-reload
 systemctl start docker
 docker info

 

(3)安裝必要工具(全部節點)

工具說明:服務器

  • kubeadm:部署集羣用的命令網絡

  • kubelet:在集羣中每臺機器上都要運行的組件,負責管理Pod、容器的生命週期

  • kubectl:集羣管理工具(可選,只要在控制集羣的節點上安裝便可)

 # 配置yum源
  cat <<EOF > /etc/yum.repos.d/kubernetes.repo
 [kubernetes]
 name=Kubernetes
 baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
 enabled=1
 gpgcheck=0
 repo_gpgcheck=0
 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
 EOF
 
 # 安裝工具
 yum list kubeadm --showduplicates | sort -r
 #     注:--showduplicates 表示查看當前支持的版本
 # 安裝指定版本
 version='1.14.5-0'
 yum install -y kubeadm-${version} kubelet-${version} kubectl-${version}  --disableexcludes=kubernetes
 # 配置kubelet,若未禁用Swap設備,則須要編輯kubelet的配置文件/etc/sysconfig/kubelt,設置其忽略Swap啓用的狀態錯誤。
  KUBELET_EXTRA_ARGS=「--fail-swap-on=false」
 
 # 設置kubelet的cgroupdriver(kubelet的cgroupdriver默認爲systemd,若是上面沒有設置docker的exec-opts爲systemd,這裏就須要將kubelet的設置爲cgroupfs)
 sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
 
 # 啓動kubelet
 systemctl enable kubelet && systemctl start kubelet

 

kubeadm的相關命令
 init # 初始化集羣
  --image-repository string ## 指定初始化集羣時鏡像倉庫地址
 join # 加入集羣
 reset # 重置集羣
 config # 顯示初始化集羣相關默認配置
  kubeadm config init-defaults # 顯示初始化集羣模式配置
  kubeadm config images {list | pull}   # 顯示/拉取初始化集羣相關鏡像
  kubeadm config upload from-file # 由配置文件上傳到集羣中生成ConfigMap
  kubeadm config upload from-flags # 由配置參數生成ConfigMap
  kubeadm config view # 查看當前集羣中的配置值
  kubeadm config print init-defaults # 輸出 kubeadm init 默認參數文件的內容
  kubeadm config print join-defaults # 輸出 kubeadm join 默認參數文件的內容
  kubeadm config migrate # 在新舊版本之間進行配置轉換
  kubeadm config images list   # 列出所需的鏡像列表
  kubeadm config images pull   # 拉取鏡像到本地

說明:kubeadm init命令支持兩種初始化方式,一種是經過命令行選項傳遞關鍵的部署設定,另外一種是基於yaml格式的專用配置文件,後一種容許用戶自定義各個部署參數。

初始化集羣
 # 可在執行kubeadm init以前提早拉取相關鏡像
 kubeadm config images list
 kubeadm config images pull
 kubeadm init --kubernetes-version="v1.14.5" --pod-network-cidr="10.244.0.0/16" --ignore-preflight-errors=Swap  --dry-run  --experimental-upload-certs
 
 # 說明
 #     kubernetes-version 指定要部署的kubernetes程序版本,須要與當前的kubeadm支持的版本保持一致
 #   pod-network-cidr 指定Pod網絡網段,需跟網絡插件一致
 #   service-cidr   指定集羣服務地址
 # 添加 --experimental-upload-certs 參數能夠在後續執行加入節點時自動分發證書文件
配置使用kubectl

kubectl是kube-apiserver的命令行客戶端程序,實現了除系統部署以外的幾乎所有的集羣管理操做,是kubernetes管理員使用最多的命令之一。kubectl需經由API Server認證及受權後方能執行相應的管理操做。kubeadm部署的集羣爲其生成了一個具備管理員權限的認證配置文件 /etc/kubernetes/admin.conf,它可由kubectl經過默認的「$HOME/.kube/config」的路徑進行加載。固然,用戶也可在kubectl命令上使用--kubeconfig選項指定一個別的位置。

 mkdir -p $HOME/.kube
 cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 # 檢查集羣組件狀態
 kubectl get componentstatus
 
 # 查看當前kubectl配置
 kubectl config view
部署網絡插件

Kubernetes系統上Pod網絡的實現依賴於第三方插件進行。經常使用有flannel、calico、canal和kube-router

 # flannel
 # github地址:github.com/coreos/flannel
 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安裝Node
 # 先進行環境基礎配置、
 yum install kubelet kubeadm
 kubeadm join XXXX
 # 安裝flannel
 kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
 
 # 如今node也使用kubectl
 mkdir ~/.kube
 cp Master:/etc/kubernetes/admin.conf Node:/root/.kube/config
相關文章
相關標籤/搜索