银河麒麟v10:通过rancher离线安装k8s
文章目录一、环境准备:二、先在harbor页面建一个项目叫rancher三、rancher离线安装k8s四、安装使用k8s遇到的问题1. worker节点一直waiting2. failed to set bridge addr: "cni0" already has an IP address different from 10.42.0.1/243. rancher安装k8s后,在主机没有ku
文章目录
一、环境准备:
给机器配置hosts:vi /etc/hosts
166.108.30.230 k8s-master
166.108.31.6 k8s-worker1
166.108.31.12 k8s-worker2
166.108.30.108 harbor01.io
hosts其中有一个harbor的主机地址是通过nginx转发的。harbor默认是80端口,但是与k8s worker在一台机器上会端口冲突,所以把harbor端口改为18800,并且nginx代理,nginx配置如下:
vi /etc/nginx/nginx.conf
upstream bdp-harbor-web{
server 166.108.31.12:18880;
}server {
listen 80;
server_name harbor01.io;location / { proxy_pass http://bdp-harbor-web; proxy_set_header Host $host:$server_port; proxy_set_header X-Real_IP $remote_addr; client_max_body_size 10000m; #允许客户端请求的最大单文件字节数 }
}
二、先在harbor页面建一个项目叫rancher
把所有的rancher-images.tar.gz这个包上传到harbor中,这个gz包的生成见另一篇文章:rancher镜像上传到harbor私库
三、rancher离线安装k8s
以下所有操作在rancher页面中进行:
-
新建集群的配置
-
系统设置
修改docker为自己的版本
修改rancher server访问地址,必须是https,集群中所有主机都能访问此地址
修改镜像摘取地址为私库地址
-
安装
1)master :192.168.0.15
2)worker:192.168.0.14
3)worker:192.168.0.9
安装同上
安装后,等一会儿,待所有节点状态变为active即为成功。
四、安装使用k8s遇到的问题
1. worker节点一直waiting
分析:docker ps,再docker logs查看容器镜像名称为:nginx-proxy的日志,发现报以下错误:/usr/bin/nginx-proxy: line 4: /usr/bin/confd: cannot execute binary file: Exec format error。说明confd没有渲染。在去找master:6443时由于没有渲染会导致去找127.0.0.1:6443端口找不到而报的错。
解决:需要改下nginx-proxy容器的配置,步骤如下:
1)进入nginx-proxy容器内,
docker exec -it nginx-proxy bash
bash-5.1# cd /etc/nginx/
bash-5.1# vi /etc/nginx/nginx.conf
bash-5.1# exit
2)其中/etc/nginx/nginx.conf文件模板改为以下内容:
error_log stderr notice;
worker_processes auto;
events {
multi_accept on;
use epoll;
worker_connections 1024;
}
stream {
upstream kube_apiserver {
server 10.4.3.38:6443;//把这个地址改成真正master的主机ip和端口号
}
server {
listen 6443;
proxy_pass kube_apiserver;
proxy_timeout 30;
proxy_connect_timeout 2s;
}
}
3)最后退出容器,再重启docker:systemctl restart docker
2. failed to set bridge addr: “cni0” already has an IP address different from 10.42.0.1/24
解决:1)首先我们重新配置k8s的flannel文件,可以参考其他环境的文件配置,也可以重新安装插件生成,会在/run下面生成flannel文件夹,下面包含网络配置环境变量(注明:三个节点的subnet网段不能相同)
[root@cn01 flannel]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.42.0.0/16
FLANNEL_SUBNET=10.42.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
2)ifconfig命令查看出错节点cni0的网卡配置,发现cni0的这个网卡地址是.,明显与报错中的10.42.0.1不一致
[root@cn01 flannel]# ifconfig cni0
cni0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.100.1.1 netmask 255.255.255.0 broadcast 172.100.1.255
inet6 fe80::60bc:ecff:febc:5d32 prefixlen 64 scopeid 0x20
…
3)我们可以将其改为10.42.0.1,也可将这个错误的网卡删掉,它会自己重建,这里采用删除重生的方法,首先停用网络,然后删除配置
[root@cn01 flannel]# ifconfig cni0 down
[root@cn01 flannel]# ip link delete cni0
4)然后查看节点重建的cni0网卡,会依据flannel的网络环境配置生成
[root@cn01 flannel]# ifconfig cni0
cni0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.42.0.1 netmask 255.255.255.0 broadcast 10.42.0.255…
3. rancher安装k8s后,在主机没有kubectl命令
下载kubectl命令:curl -LO “https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/arm64/kubectl”
chmod 777 kubectl
把rancher上的kubconfig文件拷贝到/etc/kubernetes/下改为admin.conf;
把rancher上的kubconfig文件将配置保存到~/.kube/config
把kubectl放入/usr/sbin下供全局访问
4.rancher页面删除不了命名空间
问题:刚新建的命名空间ide想删除,页面删除后一直是removing状态,用命令查看kubectl get ns
为Terminating状态
分析:1)查看命名空间详情kubectl get ns ide -o yaml
2)查看该命名空间下的资源:kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n ide
报错:error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request。
随后查kubectl get apiservice
,发现下面服务状态为false,但是查看docker ps或kubectl get pods -n kube-system,该服务已经启动,暂时不管
v1beta1.metrics.k8s.io kube-system/metrics-server False (FailedDiscoveryCheck
或用此命令查看kubectl get all -n ide
,输出No resources found in ide namespace,说明没有资源占用空间
3)尝试对命名空间进行删除:kubectl delete ns ide
4) 尝试强制删除[root@cn01 kubernetes]# kubectl delete ns ide --force --grace-period=0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
namespace “ide” force deleted…
仍然删除不了
5)使用curl删除:
kubectl get namespace ide -o json > ide.json
执行完这条命令后,当前文件夹会出现ide.json这个文件,打开这个文件,删除字段spec和finalizers这两个字段包含的内容,,再执行以下:
curl -k -H "Content-Type:application/json" -X PUT --data-binary @ide.json https://192.168.0.15:6443/api/v1/namespaces/ide/finalize
还是没有删除:原因是Unauthorized
5. docker push harbor01.io/ide/*时报错:413 Request Entity Too Large
解决:配置的私库harbor01.io用了nginx,限制了文件大小,nginx.conf文件改为如下配置:
server {
listen 80;
server_name harbor01.io; location / {
proxy_pass http://bdp-harbor-web;
proxy_set_header Host h o s t : host: host:server_port;
proxy_set_header X-Real_IP $remote_addr;
client_max_body_size 10000m; #允许客户端请求的最大单文件字节数
}}
更多推荐
所有评论(0)