环境配置
初始准备(所有节点)
关闭SELinux
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
关闭防火墙
systemctl stop firewalld & systemctl disable firewalld
配置k8s基础参数
创建目标文件
sudo vim /etc/sysctl.d/k8s.conf
写入以下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
生成ssh-keygen
使用如下命令生成ssh keygen
ssh-keygen
生成的ssh-key处于/root/.ssh/
目录下,公钥为id_rsa.pub
。
将生成的Master Node公钥置于
在目标处创建文件夹
mkdir -p /home/user2/.ssh
刷新配置
使用下列命令:
sudo sysctl --system
sudo sysctl -p
安装kubernetes
配置kubernetes配置文件(注意使用aliyun 镜像,Google上不去)
创建文件
vim /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
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安装kubelet, kubeadm, and kubectl
使用如下命令
sudo yum install -y kubelet kubeadm kubectl
启动kubectl
sudo yum install -y kubelet kubeadm kubectl && systemctl start kubelet
在Master Node安装Ansible
安装python3、将系统的python从2.+升级为3.+(坑1、坑2)
使用命令
sudo yum install git python3 python3-pip -y
安装python 3以及git
创建符号链接
sudo ln -sf /usr/bin/python3 /usr/bin/python
检查python版本更改成功
python --version
排坑2
添加EPEL存储库:
sudo yum install epel-release
安装 ansible
sudo yum -y install ansible
安装python-netaddr
sudo yum -y install python-netaddr
安装并配置kubespray
下载github kubespray项目:
wget https://github.com/kubernetes-sigs/kubespray/archive/v2.18.0.tar.gz
解压缩并切换目录
tar -xzvf v2.18.0.tar.gz & cd kubespray-2.18.0
安装requirement.txt内依赖库
sudo pip3 install -r requirements.txt
将 inventory/sample
复制到inventory/mycluster
cp -rfp inventory/sample inventory/mycluster
使用 inventory builder更新 Ansible inventory file
declare -a IPS=(172.19.35.98 172.19.35.99 172.19.35.100)
CONFIG_FILE=inventory/mycluster/hosts.yaml /usr/bin/python3.6 contrib/inventory_builder/inventory.py ${IPS[@]}
配置启动
使用以下命令
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
FAQs/经常出现的问题
1. yum 无法获取url
未配置域名解析
需要
vi /etc/resolv.conf
nameserver 223.5.5.5
search localdomain
2. 升级后yum 无法正常运行
在升级python版本后,yum依赖的python默认版本变为了python3
。当出现文件报错后需要将报错文件(/usr/bin/yum
、/usr/libexec/urlgrabber-ext-down
)的:
#!/usr/bin/python
改为
#!/usr/bin/python2.x
其中的x是原先系统中存在的python版本
3. 使用Git Clone git 命令返回443错误
由于github连接不稳定的问题,git clone 经常会连接失败。这里应改用wget
下载然后再解压(gunzip -C
)。
4. Kubernets、Github文件下载过慢、经常下载失败、因为某些原因无法下载
4.1 配置私有仓库并从私有仓库拉取
参考url: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/pull-image-private-registry/
4.2 配置镜像仓库
docker镜像仓库的配置方式参考:https://yeasy.gitbook.io/docker_practice/install/mirror
但是kubernetes1.20后使用containerd作为镜像管理,这点请关注FAQ7
5. 通过 ansible playbook 配置 kubernetes 上次配置失败、需要清除以往配置重新配置
使用下列命令清除cluster节点中kubernetes的安装
kubeadm reset -f
sudo kubeadm reset -f
sudo rm -rf /etc/cni/net.d/
modprobe -r ipip
yum -y remove kubelet kubeadm kubectl
sudo rm -rvf $HOME/.kube
sudo rm -rvf ~/.kube/
sudo rm -rvf /etc/kubernetes/
sudo rm -rvf /etc/systemd/system/kubelet.service.d
sudo rm -rvf /etc/systemd/system/kubelet.service
sudo rm -rvf /usr/bin/kube*
sudo rm -rvf /etc/cni
sudo rm -rvf /opt/cni
sudo rm -rvf /var/lib/etcd
sudo rm -rvf /var/etcd
使用下列命令重置iptables以及其他配置:
sudo yum remove -y epel-release
sudo yum remove -y ipvsadm ipset iptables
sudo yum -y autoremove
使用下列命令清除anisible playbook安装配置
ansible-playbook -i inventory/mycluster/inventory.ini reset.yml --extra-vars "reset_confirmation=yes"
6. 配置后使用命令提示hosts不存在
将主节点中的/etc/kubernetes/admin.conf
复制到其他节点中
7. Kubectl 无法拉取镜像(与crictl fall、Containerd 相同问题)
问题出现测试
使用下列命令
crictl pull <image_name>
出现错误:
FATA[0000] pulling image: rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/nginx:latest": failed to resolve reference "docker.io/library/nginx:latest": failed to do request: Head "https://registry-1.docker.io/v2/library/nginx/manifests/latest": proxyconnect tcp: EOF
排查方向一:正确配置容器镜像
使用下列命令查看containerd的下载路径配置:
vim /etc/containerd/config.toml
配置文件如下
...前略
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "k8s.m.daocloud.io/pause:3.3"
max_container_log_line_size = -1
[plugins."io.containerd.grpc.v1.cri".containerd]
default_runtime_name = "runc"
snapshotter = "overlayfs"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
runtime_engine = ""
runtime_root = ""
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
systemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://*******.mirror.aliyuncs.com"]
其中的 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
下的endPoint
一项要根据申请的阿里云镜像加速(https://help.aliyun.com/document_detail/60750.html)url进行替换。
完成配置后、刷新配置
systemctl daemon-reload
systemctl restart containerd
排查方向二:关闭错误代理
使用下列命令查看代理配置:
vim /etc/systemd/system/containerd.service.d/http-proxy.conf
配置文件如下:
Environment="HTTP_PROXY=http://<proxy_ip>:<proxy_port>/
HTTPS_PROXY=http://<proxy_ip>:<proxy_port>/
NO_PROXY=..."
将其中的HTTP_PROXY
以及HTTPS_PROXY
以及其等于号的内容统统删除。
完成配置后、刷新配置
systemctl daemon-reload
systemctl restart containerd