由于工作的需要, 手工部署一个 Kubernetes 环境(k8s)。(以前都是云上搞定,拿来用)

习惯把这种工作记录下来,自己备查也和别人分享

网上相关文章很多, 我也参考了很多,这里推荐一个 链接
https://www.kubernetes.org.cn/5462.html

可以基于这个链接做, 碰到问题了,再去查其它文章。 当然也可以基于我的文章。 强烈建议读完全文再操作,尤其是最后的ps部分

------------------------------------------------------------------------------------------------------------------------------------------------------------------

1. 首先准备两台机器 ubt 18.04 安装好 docker 

机器名 IP 作用说明  
kube-master 192.168.0.200 k8 管理节点  
node1 192.168.0.201 k8 工作节点  

怎么修改机器名,自己网上查去
hosts 文件为:

192.168.0.200 kube-master
192.168.0.201 node1

关闭防火墙,关闭swap 等

2.  两个难点之一 , 安装 kubelet kubeadm kubectl

因为访问国外网络慢,所以需要修改 apt-get 的访问源

/etc/apt/sources.list 添加deb 行 

deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

执行
apt-get update 执行
apt-get install -y kubelet kubeadm kubectl 需要 sudo 自己加
可能在 apt-get update 时会碰到 no pubkey ...
执行下面命令解决
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
kubelet kubeadm kubectl  安装好了,工作完成了 1/3. kubelet 是k8相关服务,kubectl 是k8s 管理客户端,kubeadm 是部署工具 

3. 部署主(管理)节点

本来是执行

kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.10.0.0/ --apiserver-advertise-address=192.168.0.200

一步完成, 但是由于国内的网络环境,众所周知的原因,不得不绕弯。两难点之二

在执行 init 的时候 会向  k8s.gcr.io    获取  kube-apiserver:v1.15.0  等 docker 镜像, 但是 k8s.gcr.io 访问不通。 
所以,我们要从拉取 别人的镜像, 然后改名, 再执行 kube init  .  注意,一定要版本一致,今天是1.15, 明天可能是16 ,

列出需要哪些镜像: command not found
hylas@kube-master:~$ kubeadm config images list --kubernetes-version v1.15.0
k8s.gcr.io/kube-apiserver:v1.15.0
k8s.gcr.io/kube-controller-manager:v1.15.0
k8s.gcr.io/kube-scheduler:v1.15.0
k8s.gcr.io/kube-proxy:v1.15.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.
k8s.gcr.io/coredns:1.3.
拉取镜像
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.
docker pull coredns/coredns:1.3.
改名
docker tag mirrorgooglecontainers/kube-apiserver:v1.15.0 k8s.gcr.io/kube-apiserver:v1.15.0
docker tag mirrorgooglecontainers/kube-controller-manager:v1.15.0 k8s.gcr.io/kube-controller-manager:v1.15.0
docker tag mirrorgooglecontainers/kube-scheduler:v1.15.0 k8s.gcr.io/kube-scheduler:v1.15.0
docker tag mirrorgooglecontainers/kube-proxy:v1.15.0 k8s.gcr.io/kube-proxy:v1.15.0
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.3. k8s.gcr.io/etcd:3.3.
docker tag coredns/coredns:1.3. k8s.gcr.io/coredns:1.3.

拉取完成后,执行  kubeadm init 。。。。。。。。。。。。。。。。。

成功标志, 出现:

kubeadm join 10.10.10.10: --token kekvgu.nw1n76h84f4camj6 \

--discovery-token-ca-cert-hash sha256:4ee74205227c78ca62f2d641635afa4d50e6634acfaa8291f28582c7e3b0e30e

如果没有出现,就说明没成功,根据错误反复弄。  使用  kubeadm reset  清除 kubeadm init 生成的垃圾, 有些文件可以用 rm -rf  删除。     
需要记录这行内容:    kubeadmin join  ...... 
添加工作节点用到

执行:

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

执行后 kubectl 环境有了,可以执行 kubectl nodes 看看了。   2/3 的工作量完成了。

4. 主节点生效

现在主节点还是没用,需要搭建一个网络给集群用。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

执行上面的命令搭建  flannel , k8s有很多网络选择。 有兴趣的自己研究。
网络搭建完成后,执行刚才保存下来的

kubeadm join ....................

 

执行完成后kubectl get nodes 可查看到
hylas@kube-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master Ready master 8h v1.15.1
node1 Ready <none> 5h v1.15.1

kube-master ready ,  node1 是看不到的

5. 添加 node1 工作节点,
在  192.168.0.201 机器上 安装   kubelet kubeadm kubectl   执行  kubeadm  join .....
不需要执行  init  和网络
完成后 执行 kubectl get nodes 就能看到 上面这个图了。 恭喜,你的k8s 集群就已经完成了,以后可以增加节点,减少节点。

6. 创建一个  helloword 应用,看看效果

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port= --type=NodePort

用kubectl 部署, 用 kubectl get nodes,        get pods   ,  get cs  查看集群服务状态

打开浏览器: 192.168.0.200:80  看你的hello word  , 大功告成。 

3/3 工作完成 文章完结 。



补充:

需要关闭 swap

swapoff -a

sed -i 's/.*swap.*/#&/' /etc/fstab

#关闭磁盘交换  很重要必须执行
sudo swapoff -a

ps2:

形成第二个 join

kubeadm token create

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der >/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //' kubeadm join 10.4.37.24: --token 4lqozr.xyawinzvspo4zha7 --discovery-token-ca-cert-hash sha256:b6ecd6ad73e072f2290a14213e32b681cd41c9010a9403bb32e1e213f7c167d2

ps3:
强烈建议安装 docker.io 18.09.8 版本

ps4:
解决pod不能访问外网问题
执行

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
iptables -t nat -I POSTROUTING -s 192.244.3.0/ -j MASQUERADE

其中  192.244.3.0  是  kb get pods -o wide  获得的 IP ,  在指定的node上执行

参考:
https://codyjava.iteye.com/blog/2435846
http://dockone.io/question/1350

Kubernetes 基于 ubuntu18.04 手工部署 (k8s)的更多相关文章

  1. 基于Ubuntu18.04一站式部署(python-mysql-redis-nginx)

    基于Ubuntu18.04一站式部署 Python3.6.8的安装 1. 安装依赖 ~$ sudo apt install openssl* zlib* 2. 安装python3.6.8(个人建议从官 ...

  2. kubeadm部署1.17.3[基于Ubuntu18.04]

    基于 Ubuntu18.04 使用 kubeadm 部署Kubernetes 1.17.3 高可用集群 环境 所有节点初始化 # cat <<EOF>> /etc/hosts ...

  3. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  4. ubuntu18.04.4安装k8s

    k8s部署 1.集群所有主机关闭swap sudo swapoff -a sudo sed -i 's/.*swap.*/#&/' /etc/fstab 如果重启后swap还是自动挂载执行sy ...

  5. TensorFlow从入门到理解(一):搭建开发环境【基于Ubuntu18.04】

    *注:教程及本文章皆使用Python3+语言,执行.py文件都是用终端(如果使用Python2+和IDE都会和本文描述有点不符) 一.安装,测试,卸载 TensorFlow官网介绍得很全面,很完美了, ...

  6. ubuntu18.04安装部署typecho个人博客

    LNMP一键安装包安装 wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnm ...

  7. 在ubuntu18.04上部署项目时遇到的问题总结

    因为在实验室中,有几台空闲的机子,我便选了一台准备做一个本地的服务器,因为买的阿里云学生机和之前用于FQ的机子感觉都不太顺手,阿里的学生机配置稍低,FQ用的服务器延迟太高.开始在centos和ubun ...

  8. TFRecord读写简介+Demo 基于Ubuntu18.04+Tensorflow1.12 无WARNING

    简介 TFRecord是TensorFlow官方推荐使用的数据格式化存储工具. 它规范了数据的读写方式. 只要生成一次TFRecord,之后的数据读取和加工处理的效率都会得到提高. 将图片转换成TFR ...

  9. Python web项目Django部署在Ubuntu18.04腾讯云主机上

    Django2.1 + Python3.6 + nginx + uwsgi 部署到Ubuntu18.04 材料准备 准备一个Django项目 准备一台Ubuntu18.04的主机 ssh连接到主机(腾 ...

随机推荐

  1. 【NOI2010】能量采集

    题面 题目分析 对于第\((i,j)\)个位置,对答案的贡献为\(2*gcd(i,j)-1\). 所以有\(ans=2*\sum\limits_{i=1}^n\sum\limits_{j=1}^mgc ...

  2. [转].NET4.0新特性集合贴

    vs2010正式版4月12日发布了,前几天我也下了一个,但这几天都没有时间好好试用一下,今天针对C#语言的新特性使用了一下,感觉还不错,有几个新特性和大家分享一下,希望我没有太火星…… 一.新关键词— ...

  3. Hystrix容错处理

    如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直接提供者响应或超时.在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃.这时,就需要进行容 ...

  4. 用Spire.PDF提取PDF里的PNG图片

    用Nuget抓取类库,FreeSpire.PDF就可以 代码如下 , 亲测可以抓取PNG图形,即使原图是JPG,也会存成PNG格式输出: //加载PDF文档 PdfDocument doc = new ...

  5. 2006-2007 ACM-ICPC | POJ3380 POJ3384 POJ3385 水题题解

    // CF比赛链接:http://codeforces.com/gym/101650 // POJ链接:http://poj.org/searchproblem?field=source&ke ...

  6. PAT甲级——A1079 Total Sales of Supply Chain

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  7. 06_Spring JDBCTemplate

    Spring对不同持久化技术的支持 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core.JdbcTemplate Hibernate3.0 org.spri ...

  8. java基础之final关键字

    final: 意为终态.在java中得注意以下四点: 1.final是一个修饰符,可修饰变量,方法,类. 2.final修饰子类不可以被继承. 3.final修饰的方法不可以被重写(覆盖) 4.对于一 ...

  9. Python基础---序列对象

    一.序列简介 数据结构是通过某种方式组织在一起的元素的集合. 容器(Container)是一种Python的数据结构,基本上是包含其他对象的任意对象.序列和映射(如字典)是两类主要的容器.集合(Set ...

  10. windows 常用的快捷键

    记录一些 windows 常用快捷键,待更新 Ctrl系列 快捷键 功能 Ctrl + C 复制 Ctrl + INSERT 复制 Ctrl + V 粘贴 Ctrl + Z 撤销 Ctrl + D 删 ...