1. 程式人生 > >K8s-系統初始化.01

K8s-系統初始化.01

內容轉載自:https://github.com/opsnull/follow-me-install-kubernetes-cluster/blob/master/01.%E7%B3%BB%E7%BB%9F%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F.md

上一篇:K8s-元件版本和配置策略.00

叢集機器(本文使用華為雲伺服器,CentOS 7.5系統)

  • k8s-master-0001 172.27.129.101

  • k8s-master-0002 172.27.129.102

  • k8s-master-0003 172.27.129.103

  • k8s-etcd-0001 172.27.129.104

  • k8s-etcd-0002 172.27.129.105

  • k8s-etcd-0003 172.27.129.106

  • k8s-node-0001 172.27.129.107

  • k8s-node-0002 172.27.129.108

  • k8s-node-0003 172.27.129.109

  • 本文件中的 etcd 叢集、master 節點、worker 節點使用共9臺機器。

主機名

設定永久主機名稱,然後重新登入,按照叢集機器分別改名:

$ sudo hostnamectl set-hostname k8s-master-0001   # 將 k8s-master-0001 替換為當前主機

修改每臺機器的 /etc/hosts 檔案,新增主機名和 IP 的對應關係:

$ grep k8s /etc/hosts

k8s-master-0001 172.27.129.101

k8s-master-0002 172.27.129.102

k8s-master-0003 172.27.129.103

k8s-etcd-0001 172.27.129.104

k8s-etcd-0002 172.27.129.105

k8s-etcd-0003 172.27.129.106

k8s-node-0001 172.27.129.107

k8s-node-0002 172.27.129.108

k8s-node-0003 172.27.129.109

新增 k8s 和 docker 賬戶

在每臺機器上新增 k8s 賬戶,可以無密碼 sudo:

$ sudo useradd -m k8s
$ sudo sh -c 'echo 123456 | passwd k8s --stdin' # 為 k8s 賬戶設定密碼
$ sudo visudo
$ sudo grep '%wheel.*NOPASSWD: ALL' /etc/sudoers
%wheel	ALL=(ALL)	NOPASSWD: ALL
$ sudo gpasswd -a k8s wheel

在每臺機器上新增 docker 賬戶,將 k8s 賬戶新增到 docker 組中,同時配置 dockerd 引數:

$ sudo useradd -m docker
$ sudo gpasswd -a k8s docker
$ sudo mkdir -p  /etc/docker/
$ cat /etc/docker/daemon.json
{
    "registry-mirrors": ["https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"],
    "max-concurrent-downloads": 20
}

無密碼 ssh 登入其它節點

如果沒有特殊指明,本文件的所有操作均在 k8s-master-0001 節點上執行,然後遠端分發檔案和執行命令。

設定 kube-node1 可以無密碼登入所有節點的 k8s 和 root 賬戶:

[[email protected] k8s]$ ssh-keygen -t rsa
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]

[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]
[[email protected] k8s]$ ssh-copy-id [email protected]

將可執行檔案路徑 /opt/k8s/bin 新增到 PATH 變數中

在每臺機器上新增環境變數: 

$ sudo sh -c "echo 'PATH=/opt/k8s/bin:$PATH:$HOME/bin:$JAVA_HOME/bin' >>/root/.bashrc"
$ echo 'PATH=/opt/k8s/bin:$PATH:$HOME/bin:$JAVA_HOME/bin' >>~/.bashrc
$ PATH=/opt/k8s/bin:$PATH:$HOME/bin:$JAVA_HOME/bin

安裝依賴包

在每臺機器上安裝依賴包:

CentOS:

$ sudo yum install -y epel-release conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

Ubuntu:

$ sudo apt-get install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
  • ipvs 依賴 ipset;

關閉防火牆

在每臺機器上關閉防火牆:

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
$ sudo iptables -P FORWARD ACCEPT

關閉 swap 分割槽

 

如果開啟了 swap 分割槽,kubelet 會啟動失敗(可以通過將引數 --fail-swap-on 設定為 false 來忽略 swap on),故需要在每臺機器上關閉 swap 分割槽:

$ sudo swapoff -a

為了防止開機自動掛載 swap 分割槽,可以註釋 /etc/fstab 中相應的條目:

$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  #如無,可忽略

關閉 SELinux

關閉 SELinux,否則後續 K8S 掛載目錄時可能報錯 Permission denied

$ sudo setenforce 0
$ grep SELINUX /etc/selinux/config 
SELINUX=disabled
  • 修改配置檔案,永久生效;

關閉 dnsmasq (可選)

linux 系統開啟了 dnsmasq 後(如 GUI 環境),將系統 DNS Server 設定為 127.0.0.1,這會導致 docker 容器無法解析域名,需要關閉它:

$ sudo service dnsmasq stop
$ sudo systemctl disable dnsmasq

載入核心模組

$ sudo modprobe br_netfilter
$ sudo modprobe ip_vs

設定系統引數

$ cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
$ sudo mv kubernetes.conf  /etc/sysctl.d/kubernetes.conf
$ sudo sysctl -p /etc/sysctl.d/kubernetes.conf
$ sudo mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct   # 如無,可忽略
  • tcp_tw_recycle 和 Kubernetes 的 NAT 衝突,必須關閉 ,否則會導致服務不通;
  • 關閉不使用的 IPV6 協議棧,防止觸發 docker BUG;

設定系統時區

 

$ # 調整系統 TimeZone

$ sudo timedatectl set-timezone Asia/Shanghai

$ # 將當前的 UTC 時間寫入硬體時鐘

$ sudo timedatectl set-local-rtc 0

$ # 重啟依賴於系統時間的服務

$ sudo systemctl restart rsyslog

$ sudo systemctl restart crond

 

更新系統時間

$ sudo ntpdate cn.pool.ntp.org

建立目錄

在每臺機器上建立目錄:

$ sudo mkdir -p /opt/k8s/bin && chown -R k8s /opt/k8s

$ sudo mkdir -p /etc/kubernetes/cert && chown -R k8s /etc/kubernetes

$ sudo mkdir -p /etc/etcd/cert && chown -R k8s /etc/etcd/cert

$ sudo mkdir -p /var/lib/etcd && chown -R k8s /etc/etcd/cert

修改和分發叢集環境變數定義指令碼

後續的部署步驟將使用 environment.sh 中定義的全域性環境變數,請根據自己的機器、網路情況修改。

然後,把全域性變數定義指令碼拷貝到所有節點的 /opt/k8s/bin 目錄:

source environment.sh
for colony_ip in 172.27.129.{1..9}
  do
    echo ">>> ${colony_ip}"
    scp environment.sh [email protected]${colony_ip}:/opt/k8s/bin/
    ssh [email protected]${colony_ip} "chmod +x /opt/k8s/bin/*"

參考

  1. 系統核心相關引數參考:https://docs.openshift.com/enterprise/3.2/admin_guide/overcommit.html