1. 程式人生 > >部署k8s ssl集群實踐1:基礎環境準備

部署k8s ssl集群實踐1:基礎環境準備

基礎 you code hub 錯誤 systemctl 第一個 base 感謝

參考文檔:
https://github.com/opsnull/follow-me-install-kubernetes-cluster
感謝作者的無私分享。
集群環境已搭建成功跑起來。
文章是部署過程中遇到的錯誤和詳細操作步驟記錄。如有需要對比參考,請按照順序閱讀和測試。

1.系統環境準備

三臺虛機
系統:CentOS Linux release 7.5.1804 (Core)
主機名字和ip

k8s-master 192.168.1.92
k8s-node1 ?192.168.1.93
k8s-node2 ?192.168.1.95

1.1
安裝docker(三臺都要安裝)

基於centos7部署
根據官網教程部署

https://docs.docker.com/engine/installation/linux/docker-ce/centos/#install-docker-ce?

##安裝要用到的軟件

yum -y install yum-utils device-mapper-persistent lvm2

##添加容器源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

##開放edge和test源

yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test

##查看容器最新版本命令

?yum list docker-ce --showduplicates | sort -r?

##安裝 docker ce 註意版本(最高只能安裝v17.03)

?yum install -y --setopt=obsoletes=0 docker-ce-17.03.1.ce-1.el7.centos docker-ce-selinux-17.03.1.ce-1.el7.centos

##啟動

systemctl enable docker && systemctl restart docker

1.2
系統的基礎設置(三臺都要做):

關閉selinux

sed -i ‘s/‘SELINUX=enforcing‘/‘SELINUX=disabled‘/‘ /etc/selinux/config

關閉防火墻

systemctl disable firewalld.service
iptables -P FORWARD ACCEPT

關閉swap

swapoff -a
sed -i ‘s/.*swap.*/#&/‘ /etc/fstab ?

設置hosts解析

echo -e "192.168.1.92 k8s-master\n192.168.1.93 k8s-node1\n192.168.1.95 k8s-node2" >>/etc/hosts

添加k8s和docker賬戶,設置無密碼sudo

[root@k8s-master ~]# useradd -m k8s
[root@k8s-master ~]# sh -c ‘echo 123456 | passwd k8s --stdin‘
更改用戶 k8s 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
[root@k8s-master ~]# gpasswd -a k8s wheel
正在將用戶“k8s”加入到“wheel”組中
[root@k8s-master ~]#

在每臺機器上添加 docker 賬戶,將 k8s 賬戶添加到 docker 組中,同時配置 dockerd 參數:

[root@k8s-master ~]# gpasswd -a k8s docker
正在將用戶“k8s”加入到“docker”組中

1.3

設置k8s-master無秘鑰ssh登錄所有節點(只需要在master節點)

[root@k8s-master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:b+pM6W8wQWqqPxOZNBSkz78Tfwz1Px9FXRmtjQ5VPZk root@k8s-master
The key‘s randomart image is:
+---[RSA 2048]----+
|?? .o.? ? ? ?? oX|
|?? ..?? .? ?? .E=|
|? ..?? o? ?? . ++|
|?? oo o . . . o..|
|?? .o*? So . o? .|
|? ? =.. +o? . . .|
|?? . ..oo=o? . . |
|? . o .=.o+?? o .|
|?? ..o.o=+.? ? o.|
+----[SHA256]-----+
[root@k8s-master ~]# ssh-copy-id root@k8s-master
[root@k8s-master ~]# ssh-copy-id root@k8s-node1
[root@k8s-master ~]# ssh-copy-id root@k8s-node2

1.4
安裝依賴包(三臺虛機都需要安裝)

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

ipvs 依賴 ipset

1.5
設置系統參數

/etc/sysctl.d/目錄下,新建個k8s.conf

允許路由轉發,不對bridge的數據進行處理
kubernetes1在/etc/sysctl.d/目錄下,新建個k8s.conf

內容如下:

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100

建好k8s.conf後執行
加載內核模塊

modprobe br_netfilter
modprobe ip_vs

再執行

sysctl -p /etc/sysctl.d/k8s.conf

1.6
創建目錄,後面要用到(三臺虛機都創建)
##用到了我們前面建立的k8s賬號

[root@k8s-master ~]# mkdir -p /opt/k8s/bin
[root@k8s-master ~]# chown -R k8s /opt/k8s/
[root@k8s-master ~]# mkdir -p /etc/kubernetes/cert
[root@k8s-master ~]# chown -R k8s /etc/kubernetes
[root@k8s-master ~]# mkdir -p /etc/etcd/cert
[root@k8s-master ~]# chown -R k8s /etc/etcd/
[root@k8s-master ~]#mkdir -p /var/lib/etcd && chown -R k8s /var/lib/etcd

1.7
集群環境變量

#!/usr/bin/bash
# 生成 EncryptionConfig 所需的加密 key
ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
# 最好使用 當前未用的網段 來定義服務網段和 Pod 網段
# 服務網段,部署前路由不可達,部署後集群內路由可達(kube-proxy 和 ipvs 保證)
SERVICE_CIDR="10.254.0.0/16"
# Pod 網段,建議 /16 段地址,部署前路由不可達,部署後集群內路由可達(flanneld 保證)
CLUSTER_CIDR="172.30.0.0/16"
# 服務端口範圍 (NodePort Range)
export NODE_PORT_RANGE="8400-9000"
# 集群各機器 IP 數組
export NODE_IPS=(192.168.1.92 192.168.1.93 192.168.1.95)
# 集群各 IP 對應的 主機名數組
export NODE_NAMES=(k8s-master k8s-node1 k8s-node2)
# kube-apiserver 的 VIP(HA 組件 keepalived 發布的 IP)
export MASTER_VIP=192.168.1.94
# kube-apiserver VIP 地址(HA 組件 haproxy 監聽 8443 端口)
export KUBE_APISERVER="https://${MASTER_VIP}:8443"
# HA 節點,VIP 所在的網絡接口名稱
export VIP_IF="ens192"
# etcd 集群服務地址列表
export ETCD_ENDPOINTS="https://192.168.1.92:2379,https://192.168.1.93:2379,https://192.168.1.95:2379"
# etcd 集群間通信的 IP 和端口
export ETCD_NODES="k8s-master=https://192.168.1.92:2380,k8s-node1=https://192.168.1.93:2380,k8s-node2=https://192.168.1.95:2380"
# flanneld 網絡配置前綴
export FLANNEL_ETCD_PREFIX="/kubernetes/network"
# kubernetes 服務 IP (一般是 SERVICE_CIDR 中第一個IP)
export CLUSTER_KUBERNETES_SVC_IP="10.254.0.1"
# 集群 DNS 服務 IP (從 SERVICE_CIDR 中預分配)
export CLUSTER_DNS_SVC_IP="10.254.0.2"
# 集群 DNS 域名
export CLUSTER_DNS_DOMAIN="cluster.local."
# 將二進制目錄 /opt/k8s/bin 加到 PATH 中
export PATH=/opt/k8s/bin:$PATH

打包後的變量定義見 environment.sh,後續部署時會提示導入該腳本;
把全局變量定義腳本拷貝到所有節點的 /opt/k8s/bin 目錄:

[root@k8s-master ~]# cp environment.sh /opt/k8s/bin/
[root@k8s-master ~]# scp environment.sh root@k8s-node1:/opt/k8s/bin
environment.sh? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1740? ?? 1.6MB/s?? 00:00? ?
[root@k8s-master ~]# scp environment.sh root@k8s-node2:/opt/k8s/bin
environment.sh? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1740? ?? 1.2MB/s?? 00:00? ?
[root@k8s-master ~]#

添加文件執行權限(三臺虛機都要添加)

chmod +x /opt/k8s/bin/*

1.8
基礎環境部署中遇到的錯誤記錄:

##可能會報錯,見下:

[root@k8s-master sysctl.d]# sysctl -p /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
[root@k8s-master sysctl.d]# sysctl -p /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
[root@k8s-master sysctl.d]#

解決方法:

[root@k8s-master sysctl.d]# modprobe br_netfilter
[root@k8s-master sysctl.d]# lsmod |grep bridge
bridge? ? ? ? ? ? ? ? 107106? 1 br_netfilter
stp? ? ? ? ? ? ? ? ? ? 12976? 1 bridge
llc? ? ? ? ? ? ? ? ? ? 14552? 2 stp,bridge
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@k8s-master ~]# ? ?

部署k8s ssl集群實踐1:基礎環境準備