当前位置: 首页 > 编程日记 > 正文

离线安装k8s 1.9.0

说明
本文参考 https://segmentfault.com/a/1190000012755243。在前 文基础上整理、增加说明,避坑。

踩过的坑: 安装k8s 1.9.0 实践:问题集锦

环境说明

环境信息(采用一个master节点+两个node节点)
192.168.1.137 tensorflow0 node
192.168.1.138 tensorflow1 master
192.168.1.139 tensorflow2 node

操作系统版本:

[root@tensorflow1 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

内核版本:

[root@tensorflow1 ~]# cat /proc/version
Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017

软件版本:

kubernetes v1.9.0
docker:17.03.2-ce
kubeadm:v1.9.0
kube-apiserver:v1.9.0
kube-controller-manager:v1.9.0
kube-scheduler:v1.9.0
k8s-dns-sidecar:1.14.7
k8s-dns-kube-dns:1.14.7
k8s-dns-dnsmasq-nanny:1.14.7
kube-proxy:v1.9.0
etcd:3.1.10
pause :3.0
flannel:v0.9.1
kubernetes-dashboard:v1.8.1

采用kubeadm安装
kubeadm为kubernetes官方推荐的自动化部署工具,他将kubernetes的组件以pod的形式部署在master和node节点上,并自动完成证书认证等操作。
因为kubeadm默认要从google的镜像仓库下载镜像,但目前国内无法访问google镜像仓库,所以这里我提交将镜像下好了,只需要将离线包的镜像导入到节点中就可以了。
开始安装
下载
链接: https://pan.baidu.com/s/1c2O1gIW 密码: 9s92

比对md5解压离线包

MD5 (k8s_images.tar.bz2) = b60ad6a638eda472b8ddcfa9006315ee

解压下载下来的离线包

tar -xjvf k8s_images.tar.bz2

所有节点操作

环境设置

绑定hosts
将节点ip和host写入hosts文件

[root@tensorflow1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.137 tensorflow0
192.168.1.138 tensorflow1
192.168.1.139 tensorflow2

关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

关闭selinux

修改vi /etc/selinux/config 文件,将SELINUX改为disabled
SELINUX=disabledsetenforce 0关闭swapswapoff -a
设置永久关闭swap

修改/etc/fstab中内容,将swap那一行用#注释掉。

配置系统路由参数,防止kubeadm报路由警告

echo "
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
" >> /etc/sysctl.conf
sysctl -p

安装docker
安装docker-ce17.03 (kubeadmv1.9最大支持docker-ce17.03)

rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
rpm -ivh docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

启动docker-ce

systemctl start docker && systemctl enable docker

检查docker服务

systemctl status docker
active (running)则正常

安装k8s
导入镜像

docker load <etcd-amd64_v3.1.10.tar
docker load <flannel\:v0.9.1-amd64.tar
docker load <k8s-dns-dnsmasq-nanny-amd64_v1.14.7.tar
docker load <k8s-dns-kube-dns-amd64_1.14.7.tar
docker load <k8s-dns-sidecar-amd64_1.14.7.tar
docker load <kube-apiserver-amd64_v1.9.0.tar
docker load <kube-controller-manager-amd64_v1.9.0.tar
docker load <kube-scheduler-amd64_v1.9.0.tar
docker load <kube-proxy-amd64_v1.9.0.tar
docker load <pause-amd64_3.0.tar
docker load <kubernetes-dashboard_v1.8.1.tar

注意kubernetes-dashboard_v1.8.1.tar与其他包不在同一个目录下,在上一级目录中

安装kubelet kubeadm kubectl包

rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpm kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubeadm-1.9.0-0.x86_64.rpm

修改kublet配置文件

查看docker cgroup driver:

docker info|grep Cgroup

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

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

修改 Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"。修改 systemd为cgroupfs

启动kubelet

systemctl enable kubelet && sudo systemctl start kubelet

检查kubelet服务

systemctl status kubelet

kubelet启动后 ,不停重启、ca文件不存在是正常现象,在后续步骤 kubeadm init执行后会生成ca文件,就会正常运行。

The kubelet is now restarting every few seconds, as it waits in a crashloop for kubeadm to tell it what to do. This crashloop is expected and normal, please proceed with the next step and the kubelet will start running normally.

master节点操作
开始初始化master
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
kubernetes默认支持多重网络插件如flannel、weave、calico,这里使用flanne,就必须要设置--pod-network-cidr参数,10.244.0.0/16是kube-flannel.yml里面配置的默认网段,如果需要修改的话,需要把kubeadm init的--pod-network-cidr参数和后面的kube-flannel.yml里面修改成一样的网段就可以了。

将kubeadm join xxx保存下来,等下node节点加入集群需要使用

eg:kubeadm join --token 5ce44e.47b6dc4e4b66980f 192.168.1.138:6443 --discovery-token-ca-cert-hash sha256:9d7eac82d66744405c783de5403e1f2bb7191b4c1b350d721b7b8570c62ff83a

如果忘记了,可以在master上通过kubeadmin token list得到

kubeadmin token list

默认token 24小时就会过期,后续的机器要加入集群需要重新生成token

kubeadm token create
sha256获取方式 master节点执行:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

按照上面提示,此时root用户还不能使用kubelet控制集群需要,配置下环境变量

对于非root用户

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
对于root用户

可以直接放到~/.bash_profile

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source一下环境变量source ~/.bash_profilekubectl version测试kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T21:07:38Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T20:55:30Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

安装网络,可以使用flannel、calico、weave、macvlan这里我们用flannel。直接使用离线包里面的。

若要修改网段,需要kubeadm --pod-network-cidr=和这里同步

vi kube-flannel.yml修改network项"Network": "10.244.0.0/16",

执行

kubectl create -f kube-flannel.yml

node节点操作
使用刚刚kubeadm后的kubeadm join

kubeadm join --token 5ce44e.47b6dc4e4b66980f 192.168.1.138:6443 --discovery-token-ca-cert-hash sha256:9d7eac82d66744405c783de5403e1f2bb7191b4c1b350d721b7b8570c62ff83a

在master节点上确认一下

[root@tensorflow1 hadoop]# kubectl get nodes
NAME          STATUS    ROLES     AGE       VERSION
tensorflow0   Ready     <none>    1d        v1.9.0
tensorflow1   Ready     master    1d        v1.9.0
tensorflow2   Ready     <none>    1d        v1.9.0

kubernetes会在每个node节点创建flannel和kube-proxy的pod

[root@tensorflow1 hadoop]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                   READY     STATUS    RESTARTS   AGE
kube-system   etcd-tensorflow1                       1/1       Running   0          1d
kube-system   kube-apiserver-tensorflow1             1/1       Running   0          1d
kube-system   kube-controller-manager-tensorflow1    1/1       Running   0          1d
kube-system   kube-dns-6f4fd4bdf-59ttf               3/3       Running   0          1d
kube-system   kube-flannel-ds-fb75p                  1/1       Running   0          1d
kube-system   kube-flannel-ds-ppm2t                  1/1       Running   0          1d
kube-system   kube-flannel-ds-w54wh                  1/1       Running   0          1d
kube-system   kube-proxy-4lftj                       1/1       Running   0          1d
kube-system   kube-proxy-cj4st                       1/1       Running   0          1d
kube-system   kube-proxy-kd7vb                       1/1       Running   0          1d
kube-system   kube-scheduler-tensorflow1             1/1       Running   0          1d

至此kubernetes基本集群安装完成。

--后续补充部署dashboard内容--

安装nvidia-gpu组件
这里是为了给容器使用gpu,需要安装组件,否则不用安装。

编辑/etc/docker/daemon.json

cat /etc/docker/daemon.json
{"runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}},"default-runtime": "nvidia"
}

重启docker

systemctl restart docker

编辑kubelet配置文件

资源则需要增加一行 Environment="KUBELET_EXTRA_ARGS=--feature-gates=DevicePlugins=true"  注意要加在 ExecStart= 之前

重启kubelet

systemctl daemon-reload && systemctl restart kubelet

根据gpu型号下载相应的gpu插件镜像,挂载镜像

docker load < 
# docker images
REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
nvidia/k8s-device-plugin                                 1.9                 3325c3b04513        2 weeks ago         63 MB

通过yaml文件启动

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.9/nvidia-device-plugin.yml
文件内容如下:
[root@tensorflow1 tf_gpu]# cat nvidia-device-plugin.yml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:name: nvidia-device-plugin-daemonsetnamespace: kube-system
spec:template:metadata:# Mark this pod as a critical add-on; when enabled, the critical add-on scheduler# reserves resources for critical add-on pods so that they can be rescheduled after# a failure.  This annotation works in tandem with the toleration below.annotations:scheduler.alpha.kubernetes.io/critical-pod: ""labels:name: nvidia-device-plugin-dsspec:tolerations:# Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.# This, along with the annotation above marks this pod as a critical add-on.- key: CriticalAddonsOnlyoperator: Existscontainers:- image: nvidia/k8s-device-plugin:1.9name: nvidia-device-plugin-ctrsecurityContext:allowPrivilegeEscalation: falsecapabilities:drop: ["ALL"]volumeMounts:- name: device-pluginmountPath: /var/lib/kubelet/device-pluginsvolumes:- name: device-pluginhostPath:path: /var/lib/kubelet/device-pluginssystemctl daemon-reload && systemctl restart kubelet

本文转自CSDN-离线安装k8s 1.9.0

相关文章:

eclipse 和 google拼音输入法冲突问题

eclipse每次当我按ctrl鼠标点击 代码 &#xff0c;本来应该是跳转到相应地方&#xff0c;可是现在每次一点eclipse就关掉。苦经搜索才知道&#xff0c;原来是使用eclipse时同时使用了谷歌拼音的问题&#xff0c;只要不要在点的时候使用谷歌输入法就好了。唉&#xff0c;谷歌拼音…

【腾讯bugly干货分享】微信Android热补丁实践演进之路

为什么80%的码农都做不了架构师&#xff1f;>>> 本文来自于腾讯bugly开发者社区&#xff0c;非经作者同意&#xff0c;请勿转载&#xff0c;原文地址&#xff1a;http://bugly.qq.com/bbs/forum.php?modviewthread&tid1264&extrapage%3D1 继插件化后&…

【ACM】杭电OJ 1001

是一道简单的题目&#xff0c;我只想要说&#xff1a;注意输出格式&#xff01; #include "stdio.h" int main () {int n,sum;while(scanf("%d",&n)1){sum0;for(int i1;i<n;i){sumi;} printf("%d\n\n",sum);}return 0; }

大数据处理也要安全--关于MaxCompute的安全科普

[TOC] 1.企业大数据处理现状 当今社会数据收集手段不断丰富&#xff0c;行业数据大量积累&#xff0c;数据规模已增长到了传统软件行业无法承载的海量数据&#xff08;百GB、TB乃至PB&#xff09;级别。基于此&#xff0c;阿里云推出有了一套快速、完全托管的GB/TB/PB级数据仓库…

自创设计模式-----答题卡模式

该模式是解决触发条件和触发结果的解耦&#xff0c;同时兼顾触发条件资源的可释放性。目的是为了获得触发结果。 /*** */package com.baidu.coolapp.answer;import java.util.Hashtable;import com.baidu.coolapp.composite.IComposite;/*** author liweigao**/public interfac…

The system cannot find the file specified

在家工作&#xff0c;程序在家里的电脑运行时&#xff0c;出现一个异常&#xff0c;还是第一见到&#xff1a; Server Error in / Application. The system cannot find the file specified Description: An unhandled exception occurred during the execution of the current…

【ACM】杭电OJ 1002

题目链接&#xff1a;杭电OJ 1002 表面上看是ab&#xff0c;很简单&#xff0c;其实是大数的相加&#xff0c;所以要考虑的因素有很多&#xff1b;&#xff08;瞬间觉得要是能用Python多好&#xff0c;哈哈哈&#xff09; 还有&#xff01;&#xff01;&#xff01; 要特别注…

Excel VBA 教程

https://www.w3cschool.cn/excelvba/ Excel VBA 编程教程 https://www.yiibai.com/vba VBA教程 http://www.accessoft.com/article-show.asp?id16502 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别 转载于:https://www.cnblogs.com/onelikeone/p/…

NDK环境搭建

一、Eclipse关联cygwin 1. 工程->右击选择Properties->选择Builders&#xff0c;在Builders中选择New创建一个Program 2. 参数配置 二、Eclipse关联ndk-build&#xff08;自建Builder方法&#xff09; 1. Project->Properties->Builders->New&#xff0c;新建一…

【ACM】杭电OJ 2000

题目链接&#xff1a;杭电OJ 2000 注意使用getchar()&#xff0c;因为“\n”也是一个字符 #include "stdio.h" int main () {char a,b,c,t;while(scanf("%c%c%c",&a,&b,&c)!EOF){getchar();if(a > b){ta;ab;bt;}if(a > c){ta;ac;ct;}/…

bat批处理文件启动Eclipse和ivy本地仓库的配置

一、bat批处理文件启动Eclipse 所需文件&#xff1a; 1、eclipse 2、jre 3、startup-eclipse.bat 确保以上三个文件夹同级 startup-eclipse.bat: set dir%CD% cd %dir%\eclipse eclipse.exe -vm %dir%\jre\bin -vmargs -Xms512M -Xmx1024M -XX:PermSize128M -XX:MaxPermSize256…

helm安装配置

简介 helm是kubernetes的包管理工具&#xff0c;用于简化部署和管理 Kubernetes 应用。用来管理charts——预先配置好的安装包资源。 Helm和charts的主要作用&#xff1a; 应用程序封装版本管理依赖检查便于应用程序分发helm是一个C/S框架的软件&#xff0c;helm相当于一个客户…

ndk-build 参数NDK_APPLICATION_MK问题

被网络传闻和文档无限坑啊&#xff0c;竟然都说的是错的参数名&#xff1a;NDK_APP_APPLICATION_MK是错误的&#xff0c;NDK_APPLICATION_MK才是正确的 I am trying to pass a preprocessor define into my native code using the Android NDK that is dependent on build conf…

【GOF】23中设计模式深析

2019独角兽企业重金招聘Python工程师标准>>> ###对象创建 原型模式、工厂模式、抽象工厂模式、生成器、单例模式###接口适配 适配器模式、桥接、外观模式、迭代器###行为扩展 访问者模式、装饰模式、责任链模式###算法封装 模板方法模式、策略模式、命令模式、###性…

【ACM】杭电OJ 2005

题目链接&#xff1a;杭电OJ 2005 第一次写的时候&#xff1a; #include "stdio.h" int main () {int year,month,day,days,flag;while(scanf("%d/%d/%d",&year,&month,&day)!EOF){if((year%40 && year%100!0)||(year%4000)){flag1;…

详解数组中的reduce方法

前言 这几天面试被问到了数组的方法有哪些&#xff0c;回答得简直一塌糊涂&#xff0c;面试官说reduce的功能很强大&#xff0c;于是想对这个方法进行总结&#xff0c;在红宝书中对这个方法的描述并不算多&#xff0c;我也是参考了其他文章才进行总结的&#xff0c;下面就开始吧…

NDK注意事项

1. ifeq 等命令后面要加空格 2. 换行缩进用tab&#xff0c;不要用多个空格 3. 判断编译目标需要用NDK 变量 TARGET_ARCH_ABI, 包含CPU类型&#xff0c;和ABI标识

mac os x常用快捷键及用法

最近在研究mac os x系统&#xff0c;开始入手&#xff0c;很不习惯&#xff0c;和windows差别很大&#xff0c;毕竟unix内核。使用中总结了一些使用快捷键&#xff08;默认&#xff09;&#xff0c;持续更新&#xff0c;欢迎大家补充。1.撤销&#xff1a;commandz 保存&#x…

【ACM】杭电OJ 2007

题目链接&#xff1a;杭电OJ 2007 本题容易出错的地方在于&#xff1a;要考虑输入的两个数的大小&#xff0c;一定是小的在前&#xff0c;大的在后 #include "stdio.h" int main () {int a,b,sum1,sum2,t;while(scanf("%d%d",&a,&b)!EOF){if(a&g…

iOS FMDB之FMDatabaseQueue(事物与非事物)

事物与非事物 事物是一个并发控制的基本单元&#xff0c;所谓的事务&#xff0c;它是一个操作序列&#xff0c;这些操作要么都执行&#xff0c;要么都不执行&#xff0c;它是一个不可分割的工作单位。 事物与非事物&#xff0c;简单的举例来说就是&#xff0c;事物就是把所有的…

NDK crash栈信息的错误定位

Android NDK是什么&#xff0c;为什么我们要用NDK&#xff1f; Android NDK 是在SDK前面又加上了“原生”二字&#xff0c;即Native Development Kit&#xff0c;因此又被Google称为“NDK”。众所周知&#xff0c;Android程序运行在Dalvik虚拟机中&#xff0c;NDK允许用户使用类…

【ACM】杭电OJ 1096

题目链接&#xff1a;杭电OJ 1096 只要注意输出格式就好&#xff0c;其他没有问题&#xff01; #include <stdio.h> int main () {int a,N,n,sum;scanf("%d",&N);while(N--){sum0;scanf("%d",&n);while(n--){scanf("%d",&a…

Eclipse中SVN设置文件为ignore后重新添加至版本控制

先前把需要版本控制的文件夹ignore了&#xff0c;用了很长时间找解决方法&#xff0c;结果发现竟如此简单&#xff0c;对eclipse的功能不熟悉啊。 方法如下&#xff1a;在Window->Show View -> Navigator 中可以看见所有的项目文件&#xff0c;找到ignore的文件&#xff…

第四范式完成C轮融资,金额超10亿元

雷锋网(公众号&#xff1a;雷锋网)消息&#xff0c;12月19日&#xff0c;第四范式于近期完成C轮融资&#xff0c;融资金额超过10亿元&#xff0c;估值约12亿美金。同时引入包括国新、启迪、保利、三峡、中信、农银、交银等战略股东&#xff0c;红杉中国继续追加投资。本轮新晋投…

android mediaplayer状态机

对播放音频/视频文件和流的控制是通过一个状态机来管理的。下图显示一个 MediaPlayer 对象被支持的播放控制操作驱动的生命周期和状态。椭圆代表 MediaPlayer 对象可能驻留的状态。弧线表示驱动 MediaPlayer 在各个状态之间迁移的播放控制操作。 这里有两种类型的弧线。由一个箭…

刚刚、几秒前,时间格式化函数

应用场景 浏览实时信息网站时&#xff0c;总会看到发布时间&#xff0c;是这么显示的 例如 刚刚、几秒前&#xff0c;几分钟&#xff0c;几天&#xff0c;日期 ...&#xff0c;提供以下处理方案 服务端 ——PHP客户端 ——JavaScript处理方案 服务端 ——PHP 使用服务器端实现&…

【ACM】杭电OJ 1241(深度优先搜索小结)

题目链接&#xff1a;杭电OJ 1241 深度优先搜索问题 深度优先搜索是搜索的手段之一。它从某个状态开始&#xff0c;不断地转移状态直到无法转移&#xff0c;然后回退到前一步的状态&#xff0c;继续转移到其他状态&#xff0c;如此不断重复&#xff0c;直至找到最终的解。 油…

阿里云双12服务器和阿里云双12数据库活动又开始了

一年一度的阿里云双12服务器活动又开始了&#xff0c;非常的便宜&#xff0c;只需原价的二折即可。 双12活动地址 https://m.aliyun.com/act/team1212

android audiotrack使用问题:listener不回调的原因

部分人使用audiotrack&#xff0c;有可能会发现audiotrack的回调方法不回调&#xff0c;其实很多情况下是这样子的&#xff1a; 一般的音频数据源会起一个线程获取&#xff0c;一般新起的线程都没有looper,而audiotrack的创建必须要一个looper,如果没有拿到当前线程的looper,就…

老男孩IT教育在线3期新学员司毅的计算机的基础知识

1&#xff1a;CUP在各个组件中相当于人的头主要负责运算数据和控制其他部件2&#xff1a;内存在各个组件中是临时存放数据的地方当电脑关机或重启后数据就会丢失但是它的运算速度非常快&#xff0c;因为CUP先调用它的数据。&#xff08;他的容量和处理速度直接决定了电脑的数据…