1. CentOS 7 安裝 kubelet kubeadm kubectl
1.1 yum 源修改
// 備份本地yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
// 獲取阿里yum源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
// 或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
// 更新catch
yum clean all # 清除系統(tǒng)所有的yum緩存
yum makecache # 生成yum緩存
// 查看
yum -y update
// 調(diào)整時(shí)區(qū)為上海
timedatectl set-timezone Asia/Shanghai
1.2 阿里源安裝 kubelet kubeadm kubectl
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
# yum install kubectl-1.21.3-0.x86_64 # 指定版本安裝
1.3 使橋接流量對iptables可見
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
1.4 關(guān)閉 swap
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a
1.5 驗(yàn)證是否生效棕硫,均返回 1 即正確
sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -n net.bridge.bridge-nf-call-ip6tables
echo "1" >/proc/sys/net/ipv4/ip_forward
1.6 關(guān)閉防火墻
sudo systemctl stop firewalld.service #停止firewall
sudo systemctl disable firewalld.service #禁止firewall開機(jī)啟動
sudo firewall-cmd --state #查看防火墻狀態(tài)
1.7 禁用SELINUX
sudo setenforce 0
sudo vi /etc/selinux/config
#SELINUX修改為disabled
SELINUX=disabled
1.8 升級Linux kernel to 4.4
更新yum源
yum -y update
獲取源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
安裝,裝完成后檢查 /boot/grub2/grub.cfg中對應(yīng)內(nèi)核menuentry中是否包含 initrd16 配置拭宁,如果沒有洋机,再安裝一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
查看系統(tǒng)的全部內(nèi)核
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (4.4.234-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1127.19.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-a3c527d56cc044c1887c29a15fe92891) 7 (Core)
設(shè)置開機(jī)從新內(nèi)核啟動
grub2-set-default 0
生成grub配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
重啟使配置有效
reboot
查看正在使用的內(nèi)核
uname -r
1.9 安裝 docker-ce床绪,國內(nèi)阿里倉庫安裝
#安裝所需的軟件包耘沼。yum-utils 提供了 yum-config-manager ,并且 device mapper 存儲驅(qū)動程序需要 device-mapper-persistent-data 和 lvm2湿痢。
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝最新版本的 Docker Engine-Community 和 containerd
sudo yum install docker-ce docker-ce-cli containerd.io
#將普通用戶可以執(zhí)行docker命令
#創(chuàng)建docker 用戶組
sudo groupadd docker
#普通用戶加入docker用戶組
sudo usermod -aG docker ${USER}
#啟動docker
sudo systemctl restart docker
# Create /etc/docker
mkdir /etc/docker
# Set up the Docker daemon
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# Restart Docker
systemctl daemon-reload
systemctl restart docker
# 開機(jī)啟動docker
systemctl enable docker
1.10 查看kubeadm、kubectl种樱、cubelet 版本命令
kubeadm version
kubectl version --client
kubelet --version
1.11 master 節(jié)點(diǎn)初始化集群
#POD的網(wǎng)段為: 10.122.0.0/16蒙袍, api server地址就是master本機(jī)IP俊卤。
#這一步很關(guān)鍵嫩挤,由于kubeadm 默認(rèn)從官網(wǎng)k8s.grc.io下載所需鏡像,國內(nèi)無法訪問消恍,因#此需要通過–image-repository指定阿里云鏡像倉庫地址岂昭。
#參數(shù)解釋
–kubernetes-version: 用于指定k8s版本;
–apiserver-advertise-address:用于指定kube-apiserver監(jiān)聽的ip地址,就是 master本機(jī)IP地址狠怨。
–pod-network-cidr:用于指定Pod的網(wǎng)絡(luò)范圍约啊; 10.244.0.0/16
–service-cidr:用于指定SVC的網(wǎng)絡(luò)范圍;
–image-repository: 指定阿里云鏡像倉庫地址
kubeadm init --kubernetes-version=1.18.2 \
--apiserver-advertise-address=192.168.253.11 \
--ignore-preflight-errors=all \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
#執(zhí)行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#使kubectl自動補(bǔ)全
source <(kubectl completion bash)
# 查看節(jié)點(diǎn)
kubectl get pod --all-namespaces -o wide
#添加網(wǎng)絡(luò)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
或者
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#worker 節(jié)點(diǎn)添加到集群中
kubeadm join 192.168.253.11:6443 --token zz2iu9.ta51l53ajgai8rhx --discovery-token-ca-cert-hash sha256:e49bc0b32bd1f8ebdd8420bf5f29c4d8ab8b0f4abc21d0e9612b57cb8b0c41a8
#重新生成加入集群的命令
kubeadm token create --print-join-command
1.12 部署 dashbord 界面
#下載 dashbord.yaml 文件到本地佣赖,可以在github上查看想要的版本恰矩,例如 2.0.0 地址如下:
https://github.com/kubernetes/dashboard/blob/v2.0.0/aio/deploy/recommended.yaml
kubectl create -f dashbord.yaml
kubectl proxy
#可以通過以下方式查看界面
https://github.com/kubernetes/dashboard/blob/master/docs/user/accessing-dashboard/README.md
#設(shè)置可以在外部訪問dashboard,修改 dashboard以 nodePort 訪問憎蛤,編輯配置文件
$ kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
修改類型
type: ClusterIP
改為
type: NodePort
#查看暴露的端口
kubectl -n kubernetes-dashboard get service kubernetes-dashboard
#此時(shí)可以通過31481端口訪問
https://192.168.253.11:31481/#/login
#為該賬戶創(chuàng)建登錄 token外傅,將 token 復(fù)制到 dashbord 登錄頁 token 輸入框
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep kubernetes-dashboard | awk '{print $1}')
1.13 卸載kubenetes集群
kubectl delete node --all
kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum clean all
yum remove kube*
2. Debian / Ubuntu
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
# apt-get install kubectl=1.19.3-00 kubelet=1.19.3-00 kubeadm=1.19.3-00 #指定版本安裝
3. 常見問題
1. 加入集群時(shí)報(bào)錯(cuò): /etc/kubernetes/kubelet.conf already exists
原因: 上次的配置文件沒有清理干凈,刪除即可
rm -rf /etc/kubernetes/kubelet.conf /etc/kubernetes/pki/ca.crt
2. 加入集群時(shí)報(bào)錯(cuò): [ERROR Port-10250]: Port 10250 is in use
原因:上次加入沒有成功就關(guān)閉俩檬。重置kubeadm
kubeadm reset
3. 加入集群報(bào)錯(cuò):/proc/sys/net/ipv4/ip_forward contents are not set to 1
echo "1" >/proc/sys/net/ipv4/ip_forward