Kubernetes学习笔记0-从零搭建k8s集群
先从实践开始吧
这是一个比较烧钱的方法, 我直接在腾讯云上开了两台双核4G的centos服务器。 (只要设置服务器是双核4G,非大陆地区的网络,其他默认即可,怎么便宜怎么来)
网上有很多是虚拟机的,因为某些原因不方便用虚拟机的网络,同时因为可以白嫖腾讯云的服务器,就直接买了两台~
下面参考博文中也有虚拟机配置集群的教程,没有试过,看着挺靠谱的样子~
在这里建议,买服务器如果是为了编程,强烈建议买国外的节点,很多镜像源都不用配置了,对于开发来说实在太友好了!当然访问速度也很差,如果有梯子就另当别论了,梯子相关的教程也在我的博客里,大家可以找一下。
配置: 双核(必须,没有双核就装不了)
搭建harbor教程: (这个只是个镜像仓库,也可以不装。) https://zhuanlan.zhihu.com/p/31483386
公共配置(所有机器都要安装的)
(可选)一键服务器环境脚本(这是我比较喜欢的环境配置,大家酌情使用)只是简单的安装了zsh和vim的配置
sudo yum install git -y
sudo yum install zsh -y
git clone https://github.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
./install.sh //不加sudo
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
(可选)设置主机名称,这样后面加到集群里面方便辨认
hostnamectl set-hostname 主机名
安装docker(直接用centos的yum安装的docker 实际上是podman,没有守护进程的): https://zhuanlan.zhihu.com/p/286845061
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
systemctl start docker
接下来是Kubernetes
# 官方 的方法
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# 建议用下面这个库,用上面的发现后初始化结束后会出现cni接口初始化失败的问题,看上去是版本不对 cni 版本不对,读取flannel 配置会出问题。
cat <<EOF | sudo tee /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
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo yum install kubernetes-cni -y
接下来我将分为master节点和node节点来说明。
master节点
安裝kubeadm
sudo systemctl enable --now kubelet
kubeadm init --ignore-preflight-errors=all \
--pod-network-cidr=10.244.0.0/16 \ # 这个值是后面安装flannel里用到的.
--apiserver-advertise-address=服务器内网ip
## !!!!初始化结束后会打印出kubeadm join .... 这段命令,需要记下来,后面加入节点需要用到。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
swapoff -a && systemctl daemon-reload && systemctl restart kubelet && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
K8s集群初始化成功后使用下面命令检查一下
kubectl get nodes
查看节点信息时报错
报错信息:
The connection to the server localhost:8080 was refused - did you specify the right host or port
执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
再次查看节点信息即可看到:
kubectl get nodes
发现节点的状态是NoReady。使用下面命令查看是哪里出错了
kebectl describe node
发现报错:
network plugin is not ready: cni config uninitialized
可能是cni网络接口插件没有安装上 。如果是/opt/cni/下没有bin文件,就装一个。
mkdir -p /opt/cni/bin
cd /opt/cni/bin
wget https://github.com/containernetworking/plugins/releases/download/v0.9.1/cni-plugins-linux-arm64-v0.9.1.tgz
tar -zxvf cni-plugins-linux-arm64-v0.9.1.tgz
正常来说是因为flannel 插件没装,默认是没有装的。 使用下面的命令安装
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
装了之后发现还是NoReady,使用jouralctl -f -u kubelet.service 看到下面的情况:
如果出现以下日志
"Error validating CNI config list" configList="{\n \"name\": \"cbr0\",\n \"cniVersion\": \"0.3.1\",\n \"plugins\": [\n {\n \"type\": \"flannel\",\n \"delegate\": {\n \"hairpinMode\": true,\n \"isDefaultGateway\": true\n }\n },\n {\n \"type\": \"portmap\",\n \"capabilities\": {\n \"portMappings\": true\n }\n }\n ]\n}\n" err="[failed to find plugin \"flannel\" in path [/opt/cni/bin] failed to find plugin \"portmap\" in path [/opt/cni/bin]]"
我这边的原因是安装的CNI组件版本不对,解析出问题了,需要执行:
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
yum clean all
yum install kubernetes-cni -y
最后出现查看节点信息,出现这样就大功告成了。
node节点
下面这些命令都是在node节点的机器上执行。
输入刚刚kubeadm init输出的命令:
kubeadm join xx.xx.xx.xx:6443 --token xxxxx.xxxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxx
# 上面的ip是内网IP
如果忘记了,也可以调用下面命令获得token
kubeadm token list
下面的命令获得sha256
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
之后节点就加入到集群里了。过一会儿就会出现
重装
kubeadm reset
手动删除东西:
#删除net.d
rm -rf /etc/cni/net.d
#重置iptables
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
sysctl net.bridge.bridge-nf-call-iptables=1
# 手动执行以下命令来清除对应的残余网卡信息:
sudo ip link del cni0
sudo ip link del flannel.1
# 删除 $HOME/.kube/config
rm -rf $HOME/.kube/config
参考博文
https://blog.csdn.net/qq_20143059/article/details/116156448
https://blog.csdn.net/qq_34857250/article/details/82562514
https://www.cnblogs.com/potato-chip/p/13973760.html
https://juejin.cn/post/6844903652386144263
https://blog.csdn.net/weixin_42072280/article/details/112464472
https://last2win.com/2020/01/30/k8s-install-and-use-and-fix-bug/#docker