1、kubeadm
kubeadm 是官方社區推出的一個用于快速部署 kubernetes 集群的工具。這個工具能通過兩條指令完成一個 kubernetes 集群的部署:
1.1 創建一個 Master 節點$ kubeadm init
1.2 將一個 Node 節點加入到當前集群中$ kubeadm join <Master 節點的 IP 和端口 >
2、前置要求
- 一臺或多臺機器, 操作系統 CentOS7.x-86_x64
- 硬件配置: 2GB 或更多 RAM, 2 個 CPU 或更多 CPU, 硬盤 30GB 或更多
- 集群中所有機器之間網絡互通可以訪問外網, 需要拉取鏡像
- 禁止 swap 分區
3、部署步驟
3.1.在所有節點上安裝 Docker 和 kubeadm
3.2.部署 Kubernetes Master
3.3.部署容器網絡插件
3.4.部署 Kubernetes Node, 將節點加入 Kubernetes 集群中5.部署 Dashboard Web 頁面, 可視化查看 Kubernetes 資源
4、 環境準備
?1、準備工作
- 我們可以使用 vagrant 快速創建三個虛擬機。 虛擬機啟動前先設置 virtualbox 的主機網絡。 現全部統一為 192.168.56.1, 以后所有虛擬機都是 56.x 的 ip 地址
1.設置虛擬機存儲目錄, 防止硬盤空間不足

2、?啟動三個虛擬機
?
使用下面的Vagrantfile文件
Vagrant.configure("2") do |config|
? ?(1..3).each do |i|
? ? ? ? config.vm.define "k8s-node#{i}" do |node|
? ? ? ? ? ? # 設置虛擬機的Box
? ? ? ? ? ? node.vm.box = "centos/7"? ? ? ? ? ? # 設置虛擬機的主機名
? ? ? ? ? ? node.vm.hostname="k8s-node#{i}"? ? ? ? ? ? # 設置虛擬機的IP
? ? ? ? ? ? node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"? ? ? ? ? ? # 設置主機與虛擬機的共享目錄
? ? ? ? ? ? # node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share"? ? ? ? ? ? # VirtaulBox相關配置
? ? ? ? ? ? node.vm.provider "virtualbox" do |v|
? ? ? ? ? ? ? ? # 設置虛擬機的名稱
? ? ? ? ? ? ? ? v.name = "k8s-node#{i}"
? ? ? ? ? ? ? ? # 設置虛擬機的內存大小
? ? ? ? ? ? ? ? v.memory = 4096
? ? ? ? ? ? ? ? # 設置虛擬機的CPU個數
? ? ? ? ? ? ? ? v.cpus = 4
? ? ? ? ? ? end
? ? ? ? end
? ?end
end
- 將上面的Vagrantfile到非中文無空格目錄下, 運行 vagrant up 啟動三個虛擬機。
題外話:vagrant 完全可以一鍵部署全部 k8s 集群,可參照下面的地址去實現。
https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster
http://github.com/davidkbainbridge/k8s-playground
- 進入三個虛擬機, 開啟 root 的密碼訪問權限。
Vagrant ssh XXX(比如k8s-node1) 依次進入各個節點系統之后
su root 密碼為 vagrant
vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes/no
重啟服務 service sshd restart
?所有虛擬機設置為 4 核 4G
設置好 NAT 網絡,設置各個節點網絡地址不一樣以便區分不同的節點,要不然各個節點網址一樣就不好操作。
?3、設置 linux 環境(各個節點都執行)
關閉防火墻:
systemctl stop firewalld
systemctl disable firewalld關閉 selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0臨時關閉 swap:
swapoff -a?
需設置為永久關閉
sed -ri 's/.*swap.*/#&/' /etc/fstab?
驗證,swap 必須為 0;
free -g?
?小tips:由于各個節點都要執行重復的命令,在xshell中,我們可以設置在一個節點輸入并發送給所有打開的節點從而避免重復輸入,只需在命令行區域右鍵,在彈出的窗口進行選擇已連接的會話,當只需要把命令在當前節點執行時,切換到當前會話即可。
添加主機名與 IP 對應關系
vi /etc/hosts
10.0.2.15 k8s-node1
10.0.2.24 k8s-node2
10.0.2.25 k8s-node3
hostnamectl set-hostname <newhostname>: 指定新的 hostname
su 切換過來?
將橋接的 IPv4 流量傳遞到 iptables 的鏈
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF?然后執行sysctl --system命令讓配置生效
如果執行sysctl --system遇到提示是只讀的文件系統的問題,運行如下命令
mount -o remount rw /
5、 所有節點安裝 Docker、 kubeadm、 kubelet、 kubectl
Kubernetes 默認 CRI(容器運行時) 為 Docker, 因此先安裝 Docker。
1、 安裝 docker
1、 卸載系統之前的 docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、 安裝 Docker-CE
安裝必須的依賴
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2?
設置 docker repo 的 yum 位置
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo?
由于docker鏡像的原因,這一步執行可能會失敗,如果失敗配置阿里云的??
安裝 docker,以及 docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io
3、配置 docker 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
} EOF?
sudo systemctl daemon-reload
sudo systemctl restart docker?
4、啟動 docker & 設置 docker 開機自啟
systemctl enable docker
?基礎環境準備好, 可以給三個虛擬機備份一下; 為 node3 分配 16g, 剩下的 3g。 方便未來側測試
2、添加阿里云 yum 源
?$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
3、安裝 kubeadm, kubelet 和 kubectl
yum list|grep kube
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet
注意:雖然執行了啟動命令systemctl start kubelet,但一些配置尚未完成,此時啟動失敗是正常的。鑒于篇幅關系,關于配置在下一篇文章進行總結。
?