由于工作的需要, 手工部署一个 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. windows pip 安装 转载

    经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...

  2. IDEA使用Maven+Tomcat插件实现热部署

    1 配置tomcat pom.xml <!-- tomcat7启动插件 --> <plugin> <groupId>org.apache.tomcat.maven& ...

  3. odoo 在更多下面直接调用方法

    <record id="action_get_qc_result" model="ir.actions.server"> <field nam ...

  4. 关于电容与Q值

    1, 电容模型 电容阻抗可以表示为: 可算得自谐振频率点为: 在该点,容抗与感抗差为0,电容表现出纯电阻性. 2, 阻抗曲线 自谐点是区分电容器呈容性还是感性的分界点.从阻抗曲线看,在自谐点附近阻抗较 ...

  5. cycloneii normal mode vs. arithmetic mode

    Combout = F(data1, data2, data3 or cin, data4) 在 arithmetic mode,只有 data1\data2 参加运算. 4-LUT到2个3-LUT的 ...

  6. cache方法用于查询缓存操作,也是连贯操作方法之一。

    cache方法用于查询缓存操作,也是连贯操作方法之一. cache可以用于select.find和getField方法,以及其衍生方法,使用cache方法后,在缓存有效期之内不会再次进行数据库查询操作 ...

  7. Python-基本运算符与流程控制

    目录 基本运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 身份运算符 位运算符 成员运算符 运算符优先级 流程控制 if 判断 单分支结构 双分支结构 多分支结构 while 循环 while ...

  8. ssoj 2279 磁力阵

    说不想改最后还是向T1屈服了..然后就de了一下午Bug... 虽然昨天随口扯的有点道理,正解就是迭代加深A星搜索,但实际写起来就十分难受了. 说自己的做法,略鬼畜. 每个正方形的边界上的边.每条边在 ...

  9. [POI2014]KAR-Cards

    题目链接: 传送门 题目分析: 线段树妙题,感觉思路奇奇怪怪的,虽然对我来说不是"线段树菜题"(\(ldx\)神仙\(blog\)原话)\(QAQ\) 考虑怎么样维护可合并的信息解 ...

  10. PAT甲级——A1070 Mooncake

    Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many types ...