k8s Installation and deployment
准备
- Macos/windows系统电脑
- vmware虚拟机
- Ubuntu18.10
- secureCRT(用来管理虚拟机的,比直接用vmware好用多了)
- docker-ce 18.06
由于我有你们懂得的东西,可以去国外下载对应的镜像组件等,还是比较方便,如果是没有的话,可能还得配置网络源等东西会比较麻烦
安装ubuntu
我是用的mac装的vnware,在虚拟机里面装的ubuntu,还是蛮简单的,注意的是需要至少给虚拟机cpu分配两核,k8s至少要两核才能安装
安装需要的软件
安装一些基础工具
sudo apt-get update && apt-get install -y curl telnet wget man \
apt-transport-https ca-certificates software-properties-common vim
安装docker
-
下载docker18.06的离线安装包 [18.06]
-
scp到自己的虚拟机上面去
先查看自己虚拟机的ip地址:ifconfig
然后 scp docker-ce_18.06.1_ce_3-0_ubuntu_amd64.deb tan@172.16.234.132:/home/tan/package
搞定
-
离线安装虚拟机
sudo dpkg -i docker-ce_18.06.1_ce_3-0_ubuntu_amd64.deb
我安装遇到了错误 提示我依赖缺失 然后我就安装依赖
sudo apt-get install -y libltd17
然后又提示我找不到包,应该就是源文件的问题,更新下源文件
#仅检查,不更新
sudo apt update
#更新已安装的软件包
sudo apt upsade
解决之后重新安装docker,搞定
-
允许开机启动docker
sudo systemctl enable docker
sudo systemctl start docker
-
启动一个精简的操作系统容器测试
sudo docker run -ti alpine:latest sh
-
将当前的普通用户添加到当前的docker用户组里面去
sudo groupadd docker
sudo usermod -aG docker $USER
kubernetes安装
-
免费的阿里云镜像加速器
https://ozcouvlb.mirror.aliyuncs.com
-
配置国内镜像加速器
vim /etc/docker/daemon.json
#文件里的内容如下:
# {
# "registry-mirrors": [https://ozcouvlb.mirror.aliyuncs.com]
#}
-
重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
-
配置并安装k8s源
-
创建配置文件
sudo vim /etc/apt/sources.list.d/kubernetes.list
#添加以下内容
#deb https://mirrors.ustc.edu.cn/kubernetes/apt kubernets-xenial main
sudo chmod 640 /etc/apt/sources.list.d/kubernetes.list
-
执行如下命令更新操作系统源
> sudo apt update
-
有可能遇到的问题 NO_PUBKEY,解决方法如下:
#添加认证 一定要用自己的账户执行,不能用root
sudo gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB(回显NO_PUBKEY的后8位)
sudo gpg --export --armor BA07F4FB
#将回显的key保存到一个文件里面
vim pubkey
#将ley添加到本地的truested数据库中
sudo apt-key add pubkey
-
解决后再次更新,完美搞定
-
禁止基础设施
- 关闭防火墙(容器之间通讯不需要这些限制,话说我之前用win一直也都是关闭的)
sudo ufw disable
-
关闭swap(k8s不希望使用swap)
sudo swapoff -a
永久关闭
sudo sed -i 's/.*swap.*/#$/' /etc/fstab
-
禁止selinux(ubuntu默认安装的安全组件)
#安装操控selinux的组件
sudo apt install -y selinux-utils
#禁止selinux
setenforce 0
#重启
shutdown -r now
#查看是否关闭
sudo getenforce
-
k8s系统网络配置
- 配置内核参数,将桥接的IPv4流量传递到iptables的链
创建配置文件
sudo vim /etc/sysctl.d/k8s.conf
添加如下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
-
使配置文件生效
sudo modprobe br_netfilter
sudo sysctl -p /etc/sysctl.d/k8s.conf
-
安装k8s
sudo apt update && apt-get install -y kubelet=1.13.1-00 kubernetes-cni=0.6.0-00 kubeadm=1.13.1-00 kubectl=1.13.1-00
- kubelet 永久的后端服务
- kubectl 客户端进程,用户和开发者使用kubectl可以运维维护k8s
- kubeadm 也是客户端进程,权限很高,相当于管理员,用的很少
-
设置开机自启动
sudo systemctl enable kubelet && systemctl start kubelet
sudo shutdown -r now
-
验证k8s
kubectl get nodes
kubectl version
创建多节点
-
将已经搭建好的环境的虚拟机复制两份出来,搭建一个三节点的集群
将已经搭建好开发环境的虚拟机关机,然后创建完整克隆
-
之后再用ifconfig命令查看新节点的ip,用secureCRT登录节点
-
给node配置hostname
su
vim /etc/hostname
#分别改为master/node1/node2
-
配置ip地址
vim /etc/netplan/50-cloud-init.yaml
network:
ethernets:
ens33:
addresses: [172.16.234.134/24]
dhcp4: false
gateway4: 172.16.234.2
nameservers:
addresses: [172.16.234.2]
optional: true
version: 2
按照自己节点的ip配置,也可以自己定为连续的ip,方便操作,dhcp改成false防止每次重启ip变掉
> netplan apply
使配置生效
-
修改hosts文件
vim /etc/hosts
#输入以下内容
#172.16.234.132 master
#172.16.234.133 node1
#172.16.234.134 node2
三个节点均需要配置,通过ping来检验是否配置成功
部署k8s集群
-
---------master节点上配置 --------
-
创建k8s的管理工具kubeadm对应的配置文件,候选操作在/home/itcast/working/ 目录下
-
使用kubeadm配置文件,通过在配置文件中指定docker镜像地址部署
生成配置文件
kubeadm config print init-defaults ClusterConfiguration > kubeadm.conf
-
修改配置文件里面的下面项
vim kubeadm.conf
#修改k8s版本号为v1.13.1
kubernetesVersion: v1.13.1
#修改hostname为master
name: master
#修改kubeadm.conf中的API服务器地址
localAPIEndpoint:
advertiseAddress: 172.16.234.132 # master的IP
bindPort:6443
#配置子网网络
networking:
dnsDomian: cluster.local
podSubnet: "10.244.0.0/16" # k8s内部pod网络,官方推荐
servicesSubnet: 10.96.0.0/12 # k8s服务网络,官方推荐
scheduler: {}
-
拉取k8s必备的模块镜像
#查看需要哪些镜像文件需要拉取
kubeadm config images list --config kubeadm.conf
#k8s.gcr.io/kube-apiserver:v1.13.1. 对外端口,提供入口让外部访问集群
#k8s.gcr.io/kube-controller-manager:v1.13.1 内部管理器
#k8s.gcr.io/kube-scheduler:v1.13.1 内部任务调度器
#k8s.gcr.io/kube-proxy:v1.13.1 负载均衡
#k8s.gcr.io/pause:3.1 业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效
#k8s.gcr.io/etcd:3.2.24 数据一致性
#k8s.gcr.io/coredns:1.2.6#拉取全部当前版本k8s关联的镜像
kubeadm config images pull --config ./kubeadm.conf
#如果无法下载,只能去docker.io仓库手动拉镜像然后改tag(或者registry.cn-hangzhou.aliyuncs.com/google_containers)
docker pull mirrorgooglecontainers/kube-apiserver:v1.13.1
docker tag mirrorgooglecontainers/kube-apiserver:v1.13.1 k8s.gcr.io/kube-apiserver:v1.13.1 #打tag,和需要的镜像名保持一致
docker rmi mirrorgooglecontainers/kube-apiserver:v1.13.1 #删除掉多余的镜像
#其他所有镜像类似,k8s.gcr.io/coredns:1.2.6特例
docker pull coredns/coredns:1.1.3
root@tan:/home/tan/package# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.13.1 fdb321fd30a0 11 months ago 80.2MB
k8s.gcr.io/kube-apiserver v1.13.1 40a63db91ef8 11 months ago 181MB
k8s.gcr.io/kube-controller-manager v1.13.1 26e6f1db2a52 11 months ago 146MB
k8s.gcr.io/kube-scheduler v1.13.1 ab81d7360408 11 months ago 79.6MB
k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 14 months ago 220MB
k8s.gcr.io/coredns 1.2.6 b3b94275d97c 18 months ago 45.6MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 23 months ago 742kB -
初始化k8s环境
sudo kubeadm init --config ./kubeadm.conf
回显如下:
> Your Kubernetes master has initialized successfully!
>
> To start using your cluster, you need to run the following 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:
> https://kubernetes.io/docs/concepts/cluster-administration/addons/
>
> You can now join any number of machines by running the following on each node
> as root:
>
> kubeadm join 172.16.234.132:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:ebc50ff8588c35917f9c6f84f2bd8048352b82bfb9ef06cf5b63934cb9862f49
根据提示,做如下操作
#master节点基本文件夹配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown (id -g) $HOME/.kube/config
同时,如果node节点想要加入master集群,需要执行以下命令
kubeadm join 172.16.234.132:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:ebc50ff8588c35917f9c6f84f2bd8048352b82bfb9ef06cf5b63934cb9862f49
-
启动k8s
sudo systemctl enable kubelet
sudo systemctl start kubelet
-
验证k8s启动结果
kubectl get node
如果有问题,可以参考这个 拉取最新版本然后重新来一遍,我就是这个花了一下午(微笑脸)
未完待续。。。