linux安装最新版kubernetes及使用
linux安装最新版kubernetes及使用
2024Golang面试题:
目录
一、组件介绍
kubernetes v1.20.4(目前是最新版)
centos7 我这里是用vmware虚拟出来的机器(请注意:CPU至少2核,内存2G)
docker18.06.0-ce
3台机器:
- 192.168.1.10 (master)
- 192.168.1.11 (node1)
- 192.168.1.12 (node2)
二、准备工作
以下在master节点和所有node节点上执行。
1、关闭防火墙
systemctl stop firewalld systemctl disable firewalld
2、禁用SELINUX
临时禁用 setenforce 0
或者永久禁用:
vim /etc/sysconfig/selinux
SELINUX=disabled
3、配置kubernetes配置文件
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
4、设置ipv4转发功能
vi /etc/sysctl.conf 设置: net.ipv4.ip_forward = 1
确认是否生效:
sysctl -p
5、关闭swap
永久关闭swap:
vim /etc/fstab
注释掉下面这行:
/dev/mapper/centos-swap swap swap defaults 0 0
临时关闭(注意k8s 1.8之后的版本要求永久关闭):
swapoff -a
6、安装docker
可以参考这篇文章: yum安装升级docker和docker-compose_change the door-CSDN博客_yum升级docker
此处就不再赘述了。
7、修改主机名
master节点:
hostnamectl set-hostname k8s-master
node节点:
hostnamectl set-hostname k8s-node-1
hostnamectl set-hostname k8s-node-2
8、配置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=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
9、安装kubeadm,kubelet,kubectl
yum install -y kubelet-1.20.4
yum install -y kubeadm-1.20.0-0
yum install -y kubectl-1.20.0-0systemctl enable kubelet
systemctl start kubelet
我这一步报了一个错误:
报如下错误,
file /usr/bin/kubectl from install of kubectl-1.20.4-0.x86_64 conflicts with file from package kubernetes-client-1.5.2-0.7.git269f928.el7.x86_64
解决办法:删除旧版本即可:
yum remove -y kubernetes-client-1.5.2-0.7.git269f928.el7.x86_64
然后再重试即可
三、初始化master节点
1、初始化
注意,这一部分是在master节点执行:
初始化指令(注意这个可能会持续几分钟,耐心等待):注意把IP改为你自己的master的IP
kubeadm init --kubernetes-version=1.20.0 \
--apiserver-advertise-address=192.168.1.10 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
参数解释:
–kubernetes-version: 用于指定k8s版本;
–apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。
–image-repository: 指定阿里云镜像仓库地址
–pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16
–service-cidr:用于指定SVC的网络范围;
我这里也出现了一个错误:
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
原因:
出现[WARNING IsDockerSystemdCheck],是由于docker的Cgroup Driver和kubelet的Cgroup Driver不一致导致的,此处选择修改docker的和kubelet一致
执行:
docker info | grep Cgroup
可以看到结果:
Cgroup Driver: cgroupfs
解决:
编辑文件:
/usr/lib/systemd/system/docker.service
设置:
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd
再执行:
systemctl daemon-reload
systemctl restart docker
然后再执行上面的 "初始化指令",随后运行成功,截图如下:
此时需要把上图中最后一段复制下来,以便于添加工作节点时使用。每个人生成的指令内容不一样,不要照搬。
kubeadm join 192.168.1.10:6443 --token kmvtm9.pgoi1qle3vt8v4ln \
--discovery-token-ca-cert-hash sha256:85cf84d528153aa162cb3bbd6bb22d082bad3f506bf00fc0c89fd70464509f5b【!!注意:这一句目前还不需要执行!!仅供查看】
2、配置kubectl文件
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
3、安装Calico
mkdir -p /home/k8s cd /home/k8s
wget https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml --no-check-certificate
将192.168.0.0/16修改ip地址为10.244.0.0/16:
sed -i 's/192.168.0.0/10.244.0.0/g' calico.yaml
安装calico:
kubectl apply -f calico.yaml
等待2分钟左右,确保所有pod完全启动
查看pod状态:
kubectl get pod --all-namespaces -o wide
可以看到 calico-kube-controllers容器的网段不是10.244.0.0/16,需要删除重建:
kubectl delete -f calico.yaml kubectl apply -f calico.yaml
再次查看calico-kube-controllers容器的IP:
kubectl get pod --all-namespaces -o wide
已经正常了:
4、设置开机启动kubelet
systemctl enable kubelet
四、添加工作节点
分别登入节点192.168.1.11、192.168.1.12执行:
kubeadm join 192.168.1.10:6443 --token kmvtm9.pgoi1qle3vt8v4ln \
--discovery-token-ca-cert-hash sha256:85cf84d528153aa162cb3bbd6bb22d082bad3f506bf00fc0c89fd70464509f5bsystemctl enable kubelet
登入到master机器上,
kubectl get nodes -o wide
可以看到所有节点都是Ready状态了。
五、验证
创建pod
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort
查看
kubectl get pod,svc -o wide
设置集群外访问nodeport
iptables -P FORWARD ACCEPT
使用master ip+nodeport端口方式访问:
至此,部署完毕,验证成功!
六、后续问题记录
1、第二天打开机器执行kubectl get node 报错:
The connection to the server 192.168.1.10:6443 was refused - did you specify the right host or port?
排查:
查看kubelet启动状态:
执行:
systemctl status kubelet
可以看到
WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Mon Feb 22 09:36:17 2021 from 192.168.1.1
[root@k8s-node-1 ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: activating (auto-restart) (Result: exit-code) since 一 2021-02-22 10:19:08 CST; 8s ago
Docs: https://kubernetes.io/docs/
Process: 1952 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=255)
Main PID: 1952 (code=exited, status=255)
提示已经退出了
解决:
①确认admin文件存在
ll /etc/kubernetes/admin.conf
然后执行:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
验证:
kubectl get pod --all-namespaces
可以正常执行,验证通过
2、虚拟机重启之后,执行kubectl命令报错 The connection to the server 192.168.1.20:6443 was refused - did you specify the right host or port?
执行kubectl status kubelet看到报错如下
5月 04 18:55:40 k8s-master kubelet[1097]: E0504 18:55:40.550412 1097 kubelet.go:2291] "Error getting node" err="node \"k8s-master\" not found"
5月 04 18:55:40 k8s-master kubelet[1097]: E0504 18:55:40.650770 1097 kubelet.go:2291] "Error getting node" err="node \"k8s-master\" not found"
5月 04 18:55:40 k8s-master kubelet[1097]: E0504 18:55:40.751557 1097 kubelet.go:2291] "Error getting node" err="node \"k8s-master\" not found"
5月 04 18:55:40 k8s-master kubelet[1097]: E0504 18:55:40.852597 1097 kubelet.go:2291] "Error getting node" err="node \"k8s-master\" not found"
5月 04 18:55:40 k8s-master kubelet[1097]: E0504 18:55:40.954602 1097 kubelet.go:2291] "Error getting node" err="node \"k8s-master\" not found"
5月 04 18:55:41 k8s-master kubelet[1097]: E0504 18:55:41.056006 1097 kubelet.go:2291] "Error getting node" err="node \"k8s-master\" not found"
5月 04 18:55:41 k8s-master kubelet[1097]: E0504 18:55:41.157707 1097 kubelet.go:2291] "Error getting node" err="node \"k8s-master\" not found"
各种搜索无果后,只能重新初始化kubelet。具体参考:
1)上面第三步:初始化master节点
2) 安装Calico.切记此步骤不可省略!!!
会提示/var/lib/etcd目录已存在,直接删掉再重试既可。
会提示kubelet的端口已被占用,直接执行systemctl stop kubelet再重试。
by 2024-05-04 22:02
kubeadm join 192.168.1.20:6443 --token 1ij0i3.2k9cmym4fp7vxtia \
--discovery-token-ca-cert-hash sha256:8edcd475775b4dca2e24451a3c73bc01629784e908b7f3db2719083313b5ed93
后记:
master节点reset
先执行如下操作,再执行上面的节点初始化命令:
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
安装metrics-server组件
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml
注意:
1)将镜像地址改为 registry.cn-hangzhou.aliyuncs.com/chenby/metrics-server:v0.6.1
2)如果metrics-server的pod一直未running,可以在metrics-server启动参数里添加 --kubelet-insecure-tls 可以解决
安装kubernetes补全工具
执行顺序如下:
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
更多推荐
所有评论(0)