k8s入门-1 在Ubuntu安装步骤
为了测试华为的KubeEdge,需要搭建K8s环境。
环境:
Ubuntu20.04
Docker版本
(一)安装步骤
参考:https://zhuanlan.zhihu.com/p/138554103
1,确保禁止掉swap分区
1 2 3 4 | sudo swapoff -a #修改/etc/fstab,注释掉swap那行,持久化生效 sudo vi /etc/fstab |
2,确保时区和时间正确
1 2 3 4 | sudo timedatectl set -timezone Asia /Shanghai #修改后,如果想使得系统日志的时间戳也立即生效,则: sudo systemctl restart rsyslog |
3、确保不休眠
1 | sudo systemctl mask sleep .target suspend.target hibernate.target hybrid- sleep .target |
4、设置iptables可以看到bridged traffic
先确认Linux内核加载了br_netfilter模块:
1 | lsmod | grep br_netfilter |
确保sysctl配置中net.bridge.bridge-nf-call-iptables的值设置为了1。
1 2 3 4 5 | cat <<EOF | sudo tee /etc/sysctl .d /k8s .conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system |
5、设置rp_filter的值
1 2 3 4 5 6 7 8 9 | #修改/etc/sysctl.d/10-network-security.conf sudo vi /etc/sysctl .d /10-network-security .conf #将下面两个参数的值从2修改为1 #net.ipv4.conf.default.rp_filter=1 #net.ipv4.conf.all.rp_filter=1 #然后使之生效 sudo sysctl --system |
6、开始安装K8s master
1,安装kubeadm kubeadm kubectl
1 2 3 4 5 6 7 8 9 10 | sudo apt-get update && sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl curl -s https: //mirrors .aliyun.com /kubernetes/apt/doc/apt-key .gpg | sudo apt-key add - sudo tee /etc/apt/sources .list.d /kubernetes .list <<EOF deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl |
2、初始化,这里问题很多,请参考(二)
1 2 | sudo kubeadm init --pod-network-cidr 172.16.0.0 /16 \ --image-repository registry.cn-hangzhou.aliyuncs.com /google_containers |
3、安装calico插件
下载calico的k8s yaml文件,修改里面的CALICO_IPV4POOL_CIDR的值来避免和宿主机所在的局域网段冲突(gemfield就是把原始的192.168.0.0/16 修改成了172.16.0.0/16):
1 2 3 | #下载 https://docs.projectcalico.org/v3.19/manifests/calico.yaml #修改CALICO_IPV4POOL_CIDR,然后 kubectl apply -f calico.yaml |
如果提示安装失败,去https://docs.projectcalico.org/releases 下载最新版,安装,不然不会Ready.
查看状态
1 | kubectl get pods -n kube-system -o widekubectl get pods -n kube-system -o wide |
这是从新apply的初始化过程状态
(二)问题处理
1、isn't running or healthy
1 2 3 4 | [wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests" . This can take up to 4m0s [kubelet-check] Initial timeout of 40s passed. [kubelet-check] It seems like the kubelet isn't running or healthy. [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz" : dial tcp 127.0.0.1:10248: connect: connection refused. |
解决办法:
1.1、关闭Swap
1.2、做如下处理
1 2 3 4 5 6 7 8 9 10 11 | I faced similar issue recently. The problem was cgroup driver. Kubernetes cgroup driver was set to systems but docker was set to systemd. So I created '/etc/docker/daemon.json' and added below: { "exec-opts" : [ "native.cgroupdriver=systemd" ] } Then systemctl daemon-reload systemctl restart docker systemctl restart kubelet Run kubeadm init or kubeadm join again. |
2、无法下载coredns处理
1 2 3 4 5 | docker pull coredns /coredns kubeadm config images list --config new.yaml docker images docker tag coredns /coredns :latest registry.cn-hangzhou.aliyuncs.com /google_containers/coredns/coredns :v1.8.4 docker rmi coredns /coredns :latest |
3、The connection to the server localhost:8080 was refused - did you specify the right host or port?
1 2 | echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile source /etc/profile |
4、Node节点:Config not found: /etc/kubernetes/admin.conf
1 | mv /etc/kubernetes/kubelet .conf /etc/kubernetes/admin .conf |
5、节点虚拟机提示nodename exist
error execution phase kubelet-start: a Node with name "zgj" and status "Ready" already exists in the cluster. You must delete the existing Node or change the name of this new joining Node
1 | hostnamectl set - hostname zgj1 |
因为直接复制的虚拟机,所以名字重复,这样从新加入即可。
6、reset从新安装后
Get "https://xx.xx.xx.xx:6443/version?timeout=32s": x509: certificate signed by unknown authority
1 2 3 | mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin .conf $HOME/.kube /config sudo chown $( id -u):$( id -g) $HOME/.kube /config |
(三)复制一个虚拟机,然后重命名hostname,先kubeadm reset,然后执行kubeadm最后生成的join语句。
1 2 | kubeadm join 192.168.3.67:6443 --token xxxx.xxxxxxxxx\ --discovery-token-ca-cert- hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxx |
加入Node后的样子
应该基本上成功了。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
2018-08-15 IScroll基本用法
2018-08-15 jQuery-获取元素坐标
2018-08-15 android的android.intent.action.MAIN
2018-08-15 adb.exe已停止工作
2018-08-15 今天终于想明白为什么java包要倒着写