一. 环境

  • Ubutun20
  • 一个master结点,两个node结点,均为2CPU,4G
  • 部署Ngnix 测试可用性
  • 机器IP
Node IP HostName
master 172.17.57.47 master-node
node1 172.17.57.48 k8snode000001
node2 172.17.57.50 k8snode000002

二. 安装

1. 安装Docker (3台机器都安装)

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
sudo apt update
apt install docker.iocat > /etc/docker/daemon.json <<EOF
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF

2. 安装kubelet kubeadm kubectl (3台机器都安装)

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat << EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF
apt update && apt install -y kubelet kubeadm kubectl

3. 其他系统配置 (3台机器都配置)

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld# 禁用Selinux
apt install selinux-utils
setenforce 0# 关闭swap
swapoff -a# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
sysctl --system

4. 启动Docker (3台机器都启动)

systemctl daemon-reload
systemctl enable docker
systemctl start docker

检查启动状态(3台机器都检查一遍)

root@k8snode000001:~# systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2021-09-26 10:26:56 CST; 2 days ago
TriggeredBy: ● docker.socketDocs: https://docs.docker.comMain PID: 985782 (dockerd)Tasks: 17Memory: 624.8MCGroup: /system.slice/docker.service├─ 985782 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock└─2099528 /usr/bin/unpigz -d -c

或者执行 sudo docker run hello-world

5. 部署master结点

root@lean-master:~# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.17.57.47 --kubernetes-version=v1.22.2 --ignore-preflight-errors=Swap --image-repository registry.aliyuncs.com/google_containers
...
...
To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:Then you can join any number of worker nodes by running the following on each as root:kubeadm join 172.17.57.47:6443 --token 1g54n2.zrzzpe32qaxwe90u --discovery-token-ca-cert-hash sha256:acf1b1c06045ffa9e1a8ffb8f5f9f96b138471f3a10e71d0e5b64d0015be4e8

若出现上面log则成功,根据提示还得执行以下命令

  mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

执行完成后,检查master节点状态

root@lean-master:~# kubectl get nodes
NAME            STATUS      ROLES                  AGE    VERSION
lean-master     NotReady    control-plane,master   2d2h   v1.22.2

能够看到,目前有一个master节点已经运行了,但是还处于未准备状态
下面我们还需要在Node节点执行其它的命令,将node1和node2加入到我们的master节点上

6. 部署Node节点

master节点上获取join命令

root@lean-master:~# kubeadm token create --print-join-command
kubeadm join 172.17.57.47:6443 --token xy3hnh.mxpgpgxncwebv32n --discovery-token-ca-cert-hash sha256:acf1b1c06045ffa9e1a8ffb8f5f9f96b138471f3a10e71d0e5b64d0015be4e84

复制join命令到各个Node节点上执行

kubeadm join 172.17.57.47:6443 --token xy3hnh.mxpgpgxncwebv32n --discovery-token-ca-cert-hash sha256:acf1b1c06045ffa9e1a8ffb8f5f9f96b138471f3a10e71d0e5b64d0015be4e84

再次查看master节点状态

root@lean-master:~# kubectl get nodes
NAME            STATUS      ROLES                  AGE    VERSION
k8snode000001   NotReady    <none>                 2d2h   v1.22.2
k8snode000002   NotReady    <none>                 2d1h   v1.22.2
lean-master     NotReady    control-plane,master   2d3h   v1.22.2

发现还是NotReady,接下来按照网络插件

7. 按照网络插件CNI (master节点)

# 下载网络插件配置
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml# 添加
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查看pods状态

root@lean-master:~# kubectl get pods --all-namespaces
NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE
kube-system   coredns-7f6cbbb7b8-97222              1/1     Running   0          2d3h
kube-system   coredns-7f6cbbb7b8-kpnmg              1/1     Running   0          2d3h
kube-system   etcd-lean-master                      1/1     Running   7          2d3h
kube-system   kube-apiserver-lean-master            1/1     Running   6          2d3h
kube-system   kube-controller-manager-lean-master   1/1     Running   0          44h
kube-system   kube-flannel-ds-97npx                 1/1     Running   0          2d3h
kube-system   kube-flannel-ds-l8zv6                 1/1     Running   0          2d3h
kube-system   kube-flannel-ds-n8gmf                 1/1     Running   3          2d1h
kube-system   kube-proxy-98tj7                      1/1     Running   0          2d3h
kube-system   kube-proxy-lsvqj                      1/1     Running   2          2d1h
kube-system   kube-proxy-sxzsh                      1/1     Running   0          2d3h
kube-system   kube-scheduler-lean-master            1/1     Running   0          44h

等待状态Running后,查看master状态

root@lean-master:~# kubectl get nodes
NAME            STATUS   ROLES                  AGE    VERSION
k8snode000001   Ready    <none>                 2d2h   v1.22.2
k8snode000002   Ready    <none>                 2d1h   v1.22.2
lean-master     Ready    control-plane,master   2d2h   v1.22.2

状态全为Ready了,如果还有NotReady的,可以在Master将该节点删除

kubectl delete node k8snode000001# 然后到k8snode000001节点进行重置kubeadm reset
# 重置完后在加入
kubeadm join 172.17.57.47:6443 --token 1g54n2.zrzzpe32qaxwe90u --discovery-token-ca-cert-hash sha256:acf1b1c06045ffa9e1a8ffb8f5f9f96b138471f3a10e71d0e5b64d0015be4e84

8. 测试集群

部署一个Ngnix服务

# 下载nginx 【会联网拉取nginx镜像】
root@lean-master:~# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created# 查看状态
root@lean-master:~# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-czpj4   1/1     Running   0          12s

下面我们就需要将端口暴露出去,让其它外界能够访问

#暴露端口
root@lean-master:~# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed#查看服务端口
root@lean-master:~# kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-6799fc88d8-czpj4   1/1     Running   0          68sNAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          2d3h
service/nginx        NodePort    10.108.175.89   <none>        80:32218/TCP     5s

查看端口为32218
然后浏览器访问http://<masterip>:32218

三. 常见安装错误

错误一

我们在给node1节点使用 kubernetes join命令的时候,出现以下错误

error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR Swap]: running with swap on is not supported. Please disable swap

错误原因是我们需要关闭swap

# 关闭swap
# 临时
swapoff -a
# 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab

错误二

在给node1节点使用 kubernetes join命令的时候,出现以下错误

The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused

解决方法,首先需要到 master 节点,创建一个文件

# 创建文件
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf# 添加如下内容
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"# 重置
kubeadm reset# 然后删除刚刚创建的配置目录
rm -rf $HOME/.kube#然后 在master重新初始化
kubeadm init ....#然后重新node上
kubeadm join ....

如果依然无法解决检查下 /etc/docker/daemon.json, native.cgroupdriver=systemd

cat > /etc/docker/daemon.json <<EOF
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF

Kubernete 安装相关推荐

  1. Kubernete安装

    参考网址: https://blog.csdn.net/clouduncle/article/details/82750291 https://blog.csdn.net/oyym_mv/articl ...

  2. kubernete部署安装(docker方式)

    kubernete部署安装(docker方式) kubernete简介 Kubernetes是容器集群管理系统,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. 优点: 快速部署应用 快速扩展应 ...

  3. yum 安装 Kubernete

    修改主机和host解析 10.0.0.11 k8s-master 10.0.0.12 k8s-node-1 10.0.0.13 k8s-node-2 添加 host解析 echo 'mirrors.a ...

  4. 如何在tomcat下应用部署日志_如何在kubernete集群上部署springboot应用

    1.打包springboot镜像 2.在kubernete上发布镜像 3.测试 在之前的文章中,我讲了使用kubeadm从0到1搭建kubernete集群,今天我们来聊一下如何在这套k8s集群上部署s ...

  5. vm安装net失败_使用minikube安装kubernetes和dashboard

    minikube可以运行一个本地单节点的kubernetes集群,可以非常容易地在本地部署kubernetes.虽然只支持单节点的kubernetes集群,但是能支持很多kubernetes特性,包括 ...

  6. Kubernetes安装dashboard

    2019独角兽企业重金招聘Python工程师标准>>> 1. 准备工作 参看CentOS7配置Kubernetes(K8S)集群 这里使用k8s版本为1.5.2 2. 准备yaml ...

  7. kubeadm部署安装k8s v1.18.1详解

    1.文章经常遇到bug问题的地方保持返回输出,方便您的理解. 2.为方便您的复制粘贴,无返回输出以及简单返回输出的命令前无标识符,有返回输出的命令前以"$"标识. 3.为方便你的深 ...

  8. Kubernetes 1.15.0 ubuntu16.04 高可用安装步骤

    1. 服务器说明 使用的是3台ubuntu16.04的虚拟机,具体信息如下: 172.16.100.238 master 172.16.100.239 master1 172.16.100.240 m ...

  9. Kubernetes(k8s)安装以及搭建k8s-Dashboard详解

    文章目录 一.前期准备 1)前提条件 2)机器信息 3)确保每个节点上 MAC 地址和 product_uuid 的唯一性 4)允许 iptables 检查桥接流量(可选) 5)检查所需端口 二.安装 ...

最新文章

  1. vue2.0路由之编程式导航
  2. PTA浙大版python程序设计题目集--第1章-3 输出“Python语言简单易学” (10 分)
  3. 单链表进阶学习 二段
  4. 实现DIV居中布局三种途径(转)
  5. 最近都在谈的「私域流量」,究竟有没有前途?
  6. linux下怎么监控网络 io swap,监控io性能,free命令,ps命令,查看网络状态,linux下抓包...
  7. [转载]Qt之模型/视图(实时更新数据)
  8. Springboot 基础6 - Redis实战
  9. 【文献研究】国际班轮航运的合作博弈:The coopetition game in international liner shipping
  10. php矢量瓦片,【教你一招】张海平:如何将小范围在线地图切片数据转换为GIS矢量数据?...
  11. 计算机启动时硬盘指示灯不亮,电脑启动时没有自检声,硬盘指示灯不亮
  12. LOGO特训营 第六节 字体设计实操(矩形钢笔造字)
  13. 怎么区分PV、IV、UV以及网站统计名词解释(pv、曝光、点击)
  14. Android 白天黑夜模式切换换肤
  15. 中国艺术孙溟㠭篆刻艺术
  16. bilibili 镜像
  17. 网络工程师的就业前景如何?市场需求如何?
  18. SDWAN-viptela设备上线配置
  19. 手机 wifi上网跟4G上网的区别
  20. C语言-快速排序算法(挖坑法)

热门文章

  1. 小谈向量内积与函数内积
  2. 分享量化交易券商接口的几个经典量化策略
  3. 中文搜索引擎网址提交入口大全
  4. UGUI中为Text增加下划线
  5. Android APP智能控制设备
  6. MySQL事务原理浅析
  7. LIVE555学习3:live555MediaServer讲解——Live555从启动到响应Client过程分析
  8. python 考试 判断题
  9. 专科就业工资php,专科工资高的十大专业 大专学什么专业就业前景好
  10. 微信小程序--初学篇