意義
kubernetes(k8s)是一個編排容器的工具,其實也是管理應用的全生命週期的一個工具,從創建應用,應用的部署,應用提供服務,擴容縮容應用,應用更新,都非常的方便,而且可以做到故障自愈,例如一個服務器掛了,可以自動將這個服務器上的服務調度到另外一個主機上進行運行,無需進行人工干涉,功能十分強大、十分牛逼。牛逼我們就要學,不僅要學我們還要會應用。今天開始我們一起研究8s的重要部分,從安裝到使用再到精通。廢話不多說,今日我們要用k8s,首先就得搭建好k8s集羣。下面就開始安裝配置。
規劃
IP地址 | 主機名 | 角色 | 軟硬件限制 |
192.168.220.128 | master | deploy ,master1 ,lb1 ,etcd |
(1) CPU至少1核,內存至少2G |
192.168.220.129 | node1 | node | |
192.168.220.130 | node2 | node |
#CPU至少1核,不然會報錯。
一、必要配置以及準備(所有節點上都執行)
1.1修改主機名/配置hosts
vim /etc/hosts
在文件末尾添加上
192.168.220.128 master
192.168.220.129 node1
192.168.220.130 node2
輸入nmtui 點擊set-hostname並設置主機名爲k8s-master,如下圖
1.2關閉selinux firewalld swap
1.2.1、關閉selinux:
[root@k8s-master ~]# vim /etc/sysconfig/selinux
vim /etc/selinux/config
SELINUX=enforcing 改爲 SELINUX=disabled
setenforce 0
getenforce
//輸入getenforce檢驗
[root@localhost ~]# getenforce
Permissive //臨時關閉
重啓後輸入getenforce變爲disable則代表永久關閉
或者:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux && setenforce 0
getenforce
1.2.2、關閉防火牆:
systemctl stop firewalld
systemctl disable firewalld
1.2.3、關閉swap:
#查看swap分區 若swap爲0則代表關閉
free -g
#臨時關閉swap分區, 重啓失效;
swapoff -a
#永久關閉swap分區
sed -ri 's/.*swap.*/#&/' /etc/fstab
當swap-total爲0則代表關閉成功。
1.2.4、安裝壓縮包和weget:
yum install unzip lrzsz wget vim -y
1.2.5、開啓ipv4轉發
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
#sysctl -p這句話的意思是,讓配置生效
1.2.3、配置轉發參數,否則可能會出錯
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
sysctl --system
二、安裝docker-ce及鏡像加速器:(所有節點上都執行)
一、Centos:
1、安裝docker依賴的系統工具
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加阿里雲源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安裝docker-ce
yum makecache fast
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-18.06.1.ce-3.el7 -y
systemctl enable docker && systemctl start docker && systemctl status docker
以上可直接複製粘貼執行
#以下爲說明 請不要複製、如果不指定就會安裝最新docker版本
yum list docker-ce --showduplicates | sort -r #查看遠程倉庫的docker版本
yum install docker-ce -y #安裝最新docker版本
yum install docker-ce-18.06.1.ce-3.el7 -y #安裝指定docker版本
4、使docker不再操作iptables,爲docker設置鏡像阿里雲加速器。(可略過,請一行一行復制執行,不要全部複製粘貼)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://26ujpd31.mirror.aliyuncs.com"],
"iptables":false
}
EOF
systemctl daemon-reload && systemctl restart docker && systemctl status docker
二、ubunbtu:
1.apt安裝:https://blog.csdn.net/liqi_q/article/details/83030737
2.離線安裝:https://blog.csdn.net/javalee5156/article/details/83583489
三、安裝kubeadm(所有節點上都執行)
1、配置阿里雲的kubernetes國內yum源:(請一行一行復制)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
1、配置阿里雲的kubernetes國內yum源:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
2、重建yum緩存
yum clean all
yum makecache fast
3、安裝kubeadm,kubelet,kubectl
yum list kubelet --showduplicates #查看可用的軟件版本
#指定版本進行安裝:
yum -y install kubelet-1.12.1-0
yum -y install kubeadm-1.12.1-0
yum -y install kubectl-1.12.1-0
# 安裝完成後啓動kubelet
systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet
4、看一下部署kubernetes v1.12.0需要哪些鏡像,然後提前進行下載:
kubeadm config images list --kubernetes-version=v1.12.1
#通過腳本實現(由於k8s.gcr.io鏡像地址被牆,所以這裏通過keveon地址去下載所需要鏡像,然後再重新tag回k8s.gcr.io):
vim ./docker.sh 複製以下內容後保存
#!/bin/bash
images=`kubeadm config images list --kubernetes-version=v1.12.1|awk -F '/' '{print $2}'`
for image in $images
do
docker pull keveon/$image
if [ $? -eq 0 ];then
docker tag keveon/$image k8s.gcr.io/$image
docker rmi keveon/$image
else
echo "ERROR: 下載鏡像報錯,$image"
fi
done
# 給予腳本的執行權限:
chmod +x ./docker.sh
# 開始執行腳本拉取鏡像:
sh ./docker.sh
四、初始化kubernetes(只在Master上運行)
4.1初始化鏡像
kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.10.0.0/16
kubeadm init --kubernetes-version=v1.12.1(注:這裏是之前所安裝K8S的版本號) --pod-network-cidr=10.10.0.0/16(注:這裏填寫集羣所在網關,若該網段沒被佔用,可不用修改)
#注意:在初始化完成後需要將最後一行命令複製下來保存,以便之後各個節點加入集羣。
命令格式如:kubeadm join.......
4.2錯誤處理 (可略)
#如果在初始化時遇到報錯,如:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
#處理辦法:
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
#處理辦法:
modprobe br_netfilter
#然後再重新初始化。
kubeadm reset
kubeadm init .......(例如:kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.10.0.0/16)
4.3 必要配置
# 初始化完成後根據提示完成作爲常規用戶所需的操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2、配置kubetl認證信息
#export KUBECONFIG=/etc/kubernetes/admin.conf (一次性認證,重啓失效)
# 如果你想持久化的話,直接執行以下命令【推薦】
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
4.4 安裝flanel網絡(請一行一行復制執行)
mkdir -p /etc/cni/net.d/
cat <<EOF> /etc/cni/net.d/10-flannel.conf
{
“name”: “cbr0”,
“type”: “flannel”,
“delegate”: {
“isDefaultGateway”: true
}
}
EOF
mkdir /usr/share/oci-umount/oci-umount.d -p
mkdir /run/flannel/
cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=10.0.0.0/16
FLANNEL_SUBNET=10.0.53.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF
4.5 最後需要新建一個flannel.yml文件:
執行創建flannel
sysctl net.bridge.bridge-nf-call-iptables=1
# 下載flannel.yml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改docker鏡像地址
sed 's/quay.io\/coreos/registry.cn-beijing.aliyuncs.com\/imcto/g'
# 安裝flannel
sudo kubectl apply -f kube-flannel.yml
5、默認情況下,master節點不參與工作負載,但如果希望安裝出一個all-in-one的k8s環境,則可以執行以下命令,讓master節點成爲一個node節點:
kubectl taint nodes --all node-role.kubernetes.io/master-
# 執行之後,運行以下命令,查看節點信息:
kubectl get nodes
# 會看到如下的輸出:
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 18h v1.12.1
到此爲止,我們的kubernetes_master節點搭建完畢,在node節點上只需要輸入kubeadm init時的返回值 kubeadm join....即可加入K8S集羣,加入集羣后會看到以下內容:
(ps:kubeadm init 和join 後 請耐心等待幾分鐘,需要等kubectl get pods --all-namespaces的內容全部變成RUNNING狀態,這也許會花費到您1-10分鐘)
NAME STATUS ROLES AGE VERSION
master Ready master 21m v1.12.1
node1 Ready <none> 9m23s v1.12.1
到此,搭建工作完成!!
4.6錯誤處理:(可略)
若k8s創建容器一直處於ContainerCreating的狀態
則複製下面兩行
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
#rpm2cpio命令用於將rpm軟件包轉換爲cpio格式的文件
cpio命令主要是用來建立或者還原備份檔的工具程序,cpio命令可以複製文件到歸檔包中,或者從歸檔包中複製文件。
-i 還原備份檔
-v 詳細顯示指令的執行過程
K8S的搭建工作還是挺繁瑣的,如果您需要經常搭建,可以將其封裝成腳本,提高效率。下一節,我們將學習搭建配置k8s的儀表板dashboard並學習一些基本命令,感興趣的朋友,可以繼續更進,在此小編祝大家生活愉快。有技術交流的朋友請加微信:laughing_jk。
~~您身邊喜歡綠色的朋友
帥吉帥哥(Spring)