kubernetes离线安装包,仅需三步

基础环境

关闭防火墙 selinux

$ systemctl stop firewalld && systemctl disable firewalld
$ setenforce 0

打开forward
sysctl -w net.ipv4.ip_forward=1

关闭swap

swapoff -a再把/etc/fstab文件中带有swap的行删了,没有就无视

装这两工具如果没装的话

yum install -y ebtables socat

IPv4 iptables 链设置 CNI插件需要

sysctl net.bridge.bridge-nf-call-iptables=1

墙外安装

在国内是很难使用这种方式安装了,推荐查看离线安装的方案

装docker

yum install -y dockersystemctl enable docker && systemctl start docker

装kubeadm kubectl kubelet

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpghttps://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

关闭SElinux

setenforce 0

cat < /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl --system

然后与离线安装启动master无异, kubeadm init

离线安装

福利,我已经把所有依赖的镜像,二进制文件,配置文件都打成了包,解决您所有依赖,花了很多时间整理这个,放在了阿里云市场上,希望大家给点小支持赏我一杯咖啡

这包里面把大部分操作都写在简单的脚本里面了,在master节点执行 init-master.sh 在node节点执行init-node.sh 安装dashboard执行init-dashboard.sh。

然后就可以在node节点执行master输出出来的join命令了。包的最大价值在于没有任何依赖了,再也不用访问不了国外某网而头疼了。

安装kubelet服务,和kubeadm

下载bin文件 地址

把下载好的kubelet kubectl kubeadm 直接拷贝到/usr/bin下面

配置kubelet systemd服务

cat <<EOF > /etc/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=http://kubernetes.io/docs/[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10[Install]
WantedBy=multi-user.target
EOF
cat <<EOF > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS
EOF

这里需要主意的是要看一下docker的cgroup driver与 --cgroup-driver要一致。 可以用 docker info |grep Cgroup 查看,有可能是systemd 或者 cgroupfs

增加主机名解析

为了防止无法解析主机名,修改/etc/hosts把主机名与ip的映射写上

启动master节点

这里得把google的一票镜像想办法弄下来

kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version v1.8.0 --skip-preflight-checks
  • --pod-network-cidr 参数安装calico网络时需要
  • --kubernetes-version 不加的话会去请求公网查询版本信息
  • --skip-preflight-checks 解决一个kubelet目录不空的小bug

看到这些输出时你便成功了:

To start using your cluster, you need to run (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:http://kubernetes.io/docs/admin/addons/You can now join any number of machines by running the following on each node
as root:kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

照着执行:

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

安装calico网络

kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml

join node节点

同样到node节点安装kubelet和kubeadm,和master节点操作一样,不再赘述。然后执行master节点init输出的那个命令:

  kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

执行完成后在master节点用kubectl验证节点是否健康

[root@dev-86-202 ~]# kubectl get nodes
NAME         STATUS     ROLES     AGE       VERSION
dev-86-202   NotReady   master    17h       v1.8.1

注意,master节点默认是不作为node的,也不推荐做node节点。 如果需要把master当node:

[root@dev-86-202 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-

安装dashboard

安装dashboard不难,使用时还真有点绕,主要是RBAC, 先介绍个简单的

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

安装完之后, 使用nodeport方式访问

kubectl -n kube-system edit service kubernetes-dashboard

把type: ClusterIP 改成 type: NodePort 然后保存

$ kubectl -n kube-system get service kubernetes-dashboard
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes-dashboard   10.100.124.90   <nodes>       443:31707/TCP   21h

https://masterip:31707 就可以访问dashboard了, 然而 。。 还不能用。

创建一个 dashboard-admin.yaml

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: kubernetes-dashboardlabels:k8s-app: kubernetes-dashboard
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: kubernetes-dashboardnamespace: kube-system

kubectl create -f dashboard-admin.yaml

然后在界面上直接点skip就可以了,不过你懂的,这很不安全。 真正安全的做法 请关注我进一步讨论:https://github.com/fanux

给节点加上角色

kubectl label node node1 kubernetes.io/role=node

常见问题

kubelet服务启动不了?

cgroup driver配置要相同

查看docker cgroup driver:

docker info|grep Cgroup

有systemd和cgroupfs两种,把kubelet service配置改成与docker一致

vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

KUBELETCGROUPARGS=--cgroup-driver=cgroupfs #这个配置与docker改成一致

节点not ready ?

建议安装calico网络,如果要把主节点当成node节点需要加个命令:

[root@dev-86-202 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-

dashboard 访问不了?

如果是NodePort方式访问,那需要知道dashboard服务具体调度到哪个节点上去了。访问那个节点的ip而不是master的ip。不行的话把https 改成http试试。

查看具体在哪个节点

kubectl get pod -n kube-system -o wide

拉取镜像失败?

可以把node节点与master节点的镜像都在每个节点load一下。

dashboard crash, dns起不来?

可以把node节点与master节点的镜像都在每个节点load一下。

192.168网段与calico网段冲突?

如果你恰好也是192.168网段,那么建议修改一下calico的网段

这样init

kubeadm init --pod-network-cidr=192.168.122.0/24 --kubernetes-version v1.8.1

修改calico.yaml

    - name: FELIX_DEFAULTENDPOINTTOHOSTACTIONvalue: "ACCEPT"# Configure the IP Pool from which Pod IPs will be chosen.- name: CALICO_IPV4POOL_CIDRvalue: "192.168.122.0/24"- name: CALICO_IPV4POOL_IPIPvalue: "always"# Disable IPv6 on Kubernetes.- name: FELIX_IPV6SUPPORTvalue: "false"

dns 半天起不来?

dns镜像如果load成功了的话,可能是机器配置太低,起的会非常慢,有朋友 单核2G上15分钟没启动成功。 建议双核4G以上资源

如果还起不来请kubeadm reset重来一下,有客户是通过这种方式解决这个问题的.

kubelet unhealthy?

[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10255/healthz/syncloop' failed with error: Get http://localhost:10255/healthz/syncloop: dial tcp 127.0.0.1:10255: getsockopt: connection refused.
[kubelet-check] It seems like the kubelet isn't running or healthy.

可能是manifast已经存在,删除即可:

[root@dev-86-205 kubeadm]# rm -rf /etc/kubernetes/manifests

时间超过24小时,节点加不进去?

[root@dev-86-208 test]# kubeadm token create
[kubeadm] WARNING: starting in 1.8, tokens expire after 24 hours by default (if you require a non-expiring token use --ttl 0)
887ac7.e82f0e13ad72c367

上面命令重新生成一下token,执行kubeadm join 时用上面的token替换一下,如果想永远不过期init时把ttl设置成0

--token-ttl duration

calico pod 中一个容器起不来,Calico node 'xxx' is already using the IPv4 address 192.168.152.65

rm -rf /var/etcd/
kubeadm reset

重装

卡在拉镜像的地方

关闭防火墙和selinux

$ systemctl stop firewalld && systemctl disable firewalld
$ setenforce 0
$ echo 'Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"' > /etc/systemd/system/kubelet.service.d/90-local-extras.conf
$ systemctl daemon-reload
$ systemctl restart kubelet

Failed to get system container stats for "/system.slice/docker.service"

kubelet启动参数加:

--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice

节点无法加入

dns没起来就join,或者服务器时间没同步

使用配置文件指定外部etcd集群

config.yaml:

apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
etcd:endpoints:- http://10.1.245.94:2379
networking:podSubnet: 192.168.0.0/16
kubernetesVersion: v1.8.1

etcd.yaml:

version: '2'
services:etcd:container_name: etcd_infra0image: quay.io/coreos/etcd:v3.1.10command: |etcd --name infra0--initial-advertise-peer-urls http://10.1.245.94:2380--listen-peer-urls http://10.1.245.94:2380--listen-client-urls http://10.1.245.94:2379,http://127.0.0.1:2379--advertise-client-urls http://10.1.245.94:2379--data-dir /etcd-data.etcd--initial-cluster-token etcd-cluster-1-initial-cluster infra0=http://10.1.245.94:2380--initial-cluster-state newvolumes:- /data/etcd-data.etcd:/etcd-data.etcdnetwork_mode: "host"

`$ pip install docker-compose$ docker-compose -f etcd.yaml up -d$ kubeadm init --config config.yaml

扫码关注sealyun探讨可加QQ群:98488045

kubernetes lowB安装方式相关推荐

  1. 容器云之K8s自动化安装方式的选择

    目前kubernetes 已经发展到1.5的时代,但在这之前学习和使用kubernetes还是走了不少弯路,第一个问题就是安装,也许你会说安装很简单.照着官网或网上抄一篇就可以装上了-- 而我们使用k ...

  2. Kubernetes 二进制安装详细步骤

    目录 一.Kubernetes概述 1.1 分布式中容器编排面临的问题 1.2Kubernetes解决的问题 1.3 Kubernetes是什么 1.4 Kubernetes集群架构与组件 二.k8s ...

  3. Kubernetes -K8S安装部署及SpringCloud应用

    k set image deploy kubia nodejs=luksa/kubia:v2 一.Kubernetes - 一键安装Kubernetes集群 集群方案 使用三台物理机或VMware虚拟 ...

  4. Web基础配置篇(十七): Kubernetes dashboard安装配置

    Web基础配置篇(十七): Kubernetes dashboard安装配置 一.概述 Kubernetes 简称为K8S,是用于自动部署,扩展和管理容器化应用程序的开源系统.Kubernetes的目 ...

  5. kubernetes 的安装与部署

    文章目录 一.前置工作与注意事项 二.安装 1. 初始准备 2. docker安装 3. k8s安装 三.网络插件的安装 1. 常用网络插件 2. 插件安装 四.安装dashboard 1.注意事项 ...

  6. K8S多种的安装方式简介(待完善补充)

    原文链接:海鸥81-K8S多种安装方式简介 目前安装Kubernetes的方式多样,主要是minikube kubeadm,kops,手动部署(二进制),Rancher,Kubespray. 1.mi ...

  7. Kubernetes ---- Dashboard安装、访问(Token、Kubeconfig)

    Dashbord 官方地址: https://github.com/kubernetes/dashboard 安装Dashboard: $ kubectl apply -f https://raw.g ...

  8. kubernetes布署方式介绍

    系列文章目录 Kubernetes介绍 文章目录 系列文章目录 前言 kubenetes集如布署方式 一.kubeadm 二.二进制包 三.minikube方式布署 四.kind方式布署 五.yum安 ...

  9. python基础:python扩展包的安装方式

    python扩展包有三种安装方式: 1. pip安装方式.python3默认自带pip,无需另外安装:在python2.7版本上默认为easy_install安装工作进行安装,如果需要使用pip安装, ...

  10. vim插件的安装方式 -- vim注释插件和doxygen函数注释生成插件-ctrlp插件-tabular等号对齐 插件...

    使用unzip的时候 指定 -d选项, 是说明解压到的 目标地址. 这个参数还是比较方便的, 比直接unzip到当前目录, 然后在去拷贝到目标目录, 然后再删除当前目录中的解压文件夹, 方便多了. 使 ...

最新文章

  1. This probably means that Tcl wasn‘t installed properly.
  2. Script:Collect vip resource Diagnostic Information
  3. lcd取模如何取16位_两种方式实现取16位变量的高低8位, 不严谨对比
  4. frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
  5. 用Python将文件夹打包成Zip并备份至U盘
  6. 控件UI性能调优 -- SizeChanged不是万能的
  7. pt-heartbeat 监测RDS延迟
  8. javascript判断日期奇偶_js中判断奇数或偶数
  9. [Asp.Net] Form验证中 user.identity为false
  10. Windows下安装Elasticsearch
  11. 什么是程序中的数字指纹
  12. php 怎么输入php ini,PHP怎么找到php.ini配置文件?-php教程
  13. 预测大盘最准确的指标_炒股天才江恩一辈子研究的指标,准确预测大盘走势
  14. 信号指示RSSI与显示格数关系
  15. 5G.gNB——eNB的变身
  16. SimpleDateFormat多线程天坑
  17. 城市按A-Z json表
  18. java学习笔记02
  19. 全志Tina Linux Camera 摄像头模块开发指南 全网最详细版本支持百问网T113-Pro DongshanPI-NezhaD1-H DongshanPI-D1s V853-Pro等开发板
  20. 互联网校招研发薪资汇总

热门文章

  1. 30分钟写一个聊天板
  2. 再见,MySQL !
  3. 使用freemarker引擎动态生成word文件
  4. keyshot渲染玻璃打光_KeyShot渲染,打光这么打,效果倍儿棒!
  5. 国外知名广告联盟平台
  6. python爬取歌词_利用Python网络爬虫抓取网易云歌词
  7. mysql求和语句大全_经典SQL语句大全(1)
  8. (CCTV2视频)中国动画80年
  9. 手工清除U盘Survial病毒
  10. 工地信息化——施工现场网格化管理系统实施小记