kubernetes1.8与1.9.2安装指南,离线安装,内网安装, 使用外部etcd集群,coredns替换方法

简介: 使用kubeadm部署k8s集群 三步装集群:离线包地址1.8.1 离线安装包1.9.2 注意1.9.2安装方式见商品页面,与1.8.1有点差别,做一些配置和脚本的优化 基础环境 关闭swap swapoff -a 再把/etc/fstab文件中带有swap的行删了,没有就无视 装这两工具如果没装.

使用kubeadm部署k8s集群

三步装集群:离线包地址1.8.1

离线安装包1.9.2

注意1.9.2安装方式见商品页面,与1.8.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 docker
systemctl 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.gpg
 https://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 <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --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的一票镜像想办法弄下来,然而我已经打成了一个tar包

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/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

You 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/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo 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-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system

kubectl create -f dashboard-admin.yaml

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

常见问题

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

KUBELET_CGROUP_ARGS=--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_DEFAULTENDPOINTTOHOSTACTION
 value: "ACCEPT" # Configure the IP Pool from which Pod IPs will be chosen.
 - name: CALICO_IPV4POOL_CIDR
 value: "192.168.122.0/24"
 - name: CALICO_IPV4POOL_IPIP
 value: "always" # Disable IPv6 on Kubernetes.
 - name: FELIX_IPV6SUPPORT
 value: "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

使用配置文件指定外部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_infra0
 image: quay.io/coreos/etcd:v3.1.10  command: |
 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 new  volumes:
 - /data/etcd-data.etcd:/etcd-data.etcd
 network_mode: "host"
$ pip install docker-compose $ docker-compose -f etcd.yaml up -d $ kubeadm init --config config.yaml

使用CoreDNS替换kubedns

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 featureGates:  CoreDNS: true
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
398 1
|
4月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
288 89
|
9月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
399 9
|
9月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
11月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
991 33
|
11月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
622 19
|
11月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
11月前
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
408 12
|
11月前
|
人工智能 运维 Kubernetes
2025 超详细!Lens Kubernetes IDE 多平台下载安装与集群管理教程
Lens 是一款企业级 Kubernetes 可视化操作平台,2025版实现了三大技术革新:AI智能运维(异常检测准确率98.7%)、多云联邦管理(支持50+集群)和实时3D拓扑展示。本文介绍其安装环境、配置流程、核心功能及高阶技巧,帮助用户快速上手并解决常见问题。适用于 Windows、macOS 和 Ubuntu 系统,需满足最低配置要求并前置依赖组件如 kubectl 和 Helm。通过 Global Cluster Hub 实现多集群管理,AI辅助故障诊断提升运维效率,自定义监控看板和插件生态扩展提供更多功能。
|
11月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
439 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性

推荐镜像

更多