kubernetes lowB安装方式
基础环境
关闭防火墙 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 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 <
然后与离线安装启动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/.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
给节点加上角色
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
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
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_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
扫码关注sealyun

探讨可加QQ群:98488045
kubernetes lowB安装方式的更多相关文章
- 自建Kubernetes logtail日志采集客户端安装方式
自建Kubernetes安装方式 前提条件 Kubernetes集群版本1.8及以上. 已经安装Helm命令,版本2.6.4及以上. 安装步骤 在日志服务控制台创建一个Project,Project名 ...
- [转帖]容器云之K8s自动化安装方式的选择
容器云之K8s自动化安装方式的选择 时间 2016-12-05 19:10:53 极客头条 原文 http://geek.csdn.net/news/detail/127426 主题 Kubern ...
- Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)
背景: 由于工作发生了一些变动,很长时间没有写博客了. 概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. 一.Centos7 ...
- Rainbond 5.6 版本发布,增加多种安装方式,优化拓扑图操作体验
Rainbond 5.6 版本,主要致力于提升拓扑图操作效率以及快速安装体验,降低用户使用门槛. 主要功能点解读: 支持单机快速体验 为了方便在单机电脑上快速安装体验Rainbond,当前版本支持通过 ...
- Prometheus介绍及docker安装方式
一.介绍 Prometheus是主要基于Go编写,最初在SoundCloud上构建的开源系统监视和警报工具包,它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 ...
- Hive的三种安装方式(内嵌模式,本地模式远程模式)
一.安装模式介绍: Hive官网上介绍了Hive的3种安装方式,分别对应不同的应用场景. 1.内嵌模式(元数据保村在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错) ...
- 不经过 App store 的安装方式(转)
所有安装到真机(非越狱)的应用(可以是 .app ,也可以是 .ipa ,只要编译时选的是编译成 Arm 的就好..app 转 .ipa 只需要一条命令) 都必须经过证书签名.证书主要有三大种: 企业 ...
- Eclipse插件安装方式及使用说明
拷贝安装方式 1.通过ECLIPSE_HOME\plugins安装 在eclipse的主目录ECLIPSE_HOME, 比如在我的机器上安装的目录是:ECLIPSE_HOME有一个plugins的目录 ...
- 关于MYSQL数据库安装方式及相关设置简要说明
网上关于MYSQL的教程非常多,但都不是最新的,我这里只是针对最新版本的MY SQL 的安装与设置进行一个简要的说明,大部份操作都相同. 以下是按照WINDOWS 64位操作系统+MY SQL 5.6 ...
随机推荐
- Python random() 生成随机数
random() 函数中常见的函数如下: #!/usr/bin/python # -*- coding: UTF-8 -*- import random print( random.randint(1 ...
- RobotFramework + HTTP接口自动化实现
一. 什么是自动化测试? 1. 定义 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,也可以说是软件测试的一种技术手段. 2. 常见工具 Appium ...
- Codeforces 776D:The Door Problem(DFS染色)
http://codeforces.com/problemset/problem/776/D 题意:有n个门,m个开关,每个门有一个当前的状态(0表示关闭,1表示打开),每个开关控制k个门,但是每个门 ...
- 安装Eclipse for MAC 苹果版
1. 安装Eclipse for MAC 苹果版 2. Thank you for downloading Eclipse If the download doesn't start in a few ...
- JS格式化JSON后的日期
序列化后日期变成了 /Date(1494524134000+0800)\ 这种格式 不能正常显示了 但也不能为了这个吧所有服务的DateTime字段都改成String类型 于是找了一个JS的扩展方法来 ...
- flink dataset api使用及原理
随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性.吞吐量.容错能力以及使用便 ...
- c++学习书籍推荐《C++ GUI Qt 4编程(第2版)》下载
下载地址:点我 百度云及其他网盘下载地址:点我 编辑推荐 <C++ GUI Qt 4编程(第2版)>讲授的大量Qt4编程原理和实践,都可以轻易将其应用于Qt4.4.Qt4.5及后续版本的Q ...
- C# Socket 简单的控制台案例
一.服务器端 1. 实例化并设置socket实例对象 a.创建ip地址和端口 b.绑定监听地址 c.设置一下允许同时访问数 2. 监听连接 a.通过启动一个新的线程执行,这样主线程不会假死(启动线程, ...
- k8s学习 - 概念 - ReplicationController
k8s学习 - 概念 - ReplicationController 我们有了 pod,那么就需要对 pod 进行控制,就是同一个服务的 podv我需要启动几个?如果需要扩容了,怎么办?这里就有个控制 ...
- Socket网络编程系列教程序
C语言的用途相当多,可以用在数据结构.数据库.网络.嵌入式等方面,历经40多年不衰,真是厉害!最近一直想从某一应用方面写一个系列教程,好好地把某一方面讲深讲透. 正好博主对网络方面的编 ...