2024Golang面试题:

目录

一、组件介绍

二、准备工作

三、初始化master节点

1、初始化

2、配置kubectl文件

3、安装Calico

4、设置开机启动kubelet

四、添加工作节点

五、验证

六、后续问题记录:


一、组件介绍

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-0

systemctl 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:85cf84d528153aa162cb3bbd6bb22d082bad3f506bf00fc0c89fd70464509f5b

systemctl 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端口方式访问:

  

http://192.168.1.10:31413/

至此,部署完毕,验证成功!

六、后续问题记录

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

Logo

更多推荐