前言
**什么是K8s:**k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。
K8s集群环境准备及最基本的硬件要求:
cpu:双核
Mem(内存):2G
3台dockerhost:时间同步
部署K8s集群环境
3台docker重命名,禁用swap交换分区
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# su -
[root@localhost ~]# hostnamectl set-hostname node01
[root@localhost ~]# su -
[root@localhost ~]# hostnamectl set-hostname node02
[root@localhost ~]# su -
[root@master ~]# swapoff -a //临时禁用
[root@master ~]# free
total used free shared buff/cache available
Mem: 1867292 335448 908540 9256 623304 1290100
Swap: 0 0 0
//永久禁用
[root@master ~]# vim /etc/fstab //注释掉swap那一行
禁用selinux,防火墙,并关闭开机自启(3台)
[root@master ~]# vim /etc/selinux/config
SELINUX=disabled
[root@master ~]# setenforce 0
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
编写hosts文件,设置域名解析(3台)
[root@master ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.100 master
192.168.1.110 node01
192.168.1.120 node02
[root@master ~]# scp /etc/hosts root@192.168.1.110:/etc
[root@master ~]# scp /etc/hosts root@192.168.1.120:/etc
设置免密登录(master)
[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id node01
[root@master ~]# ssh-copy-id node02
手写iptabs桥接功能配置文件(3台)
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
复制到其他两台
scp /etc/sysctl.d/k8s.conf root@192.168.1.110:/etc/sysctl.d/
scp /etc/sysctl.d/k8s.conf root@192.168.1.120:/etc/sysctl.d/
添加路由转发(3台)
echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
sysctl -p //将路由转发生效
将手写的配置文件生效(3台)
sysctl -p /etc/sysctl.d/k8s.conf
modprobe br_netfilter
编写文件添加yum源提供下载所需组件(3台)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
---------------------------------------------------------------------
Yum repolist(3台)
Yum Makecache fast (3台)
下载K8s所需组件
yum -y install kubeadm-1.15.0-0 kubelet-1.15.0-0 kubectl-1.15.0-0 (master)
yum -y install kubeadm-1.15.0-0 kubelet-1.15.0-0 (node01 node02)
将K8s加入开机自启(3台)
systemctl enable kubelet.service
将所需文件上传(master)所需文件
文件提取码:ujme
mkdir images //创建文件夹(上传到此文件夹)
cd images/
coredns-1-3-1.tar kube-apiserver-1-15.tar kube-proxy-1-15.tar myflannel-11-0.tar
etcd-3-3-10.tar kube-controller-1-15.tar kube-scheduler-1-15.tar pause-3-1.tar
将镜像全部导入docker
[root@master ~]# cat > images.sh <<EOF
> #!/bin/bash
> for i in /root/images/*
> do
> docker load < $i
> done
> EOF
[root@master ~]# chmod +x images.sh
[root@master ~]# sh images.sh
初始化k8s:(如果初始化失败使用Kubeadm reset)(master)
kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
初始化完成后(master)
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
查看节点信息
[root@master ~]# kubectl get node //此时的主节点还没有准备好
NAME STATUS ROLES AGE VERSION
master NotReady master 10m v1.15.0
创建跨主机网络(master)网络插件
文件提取码:f4ag
kubectl apply -f kube-flannel.yml
再次查看节点(稍等)
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready master 10m v1.15.0
在node01和node02上传所需文件
https://pan.baidu.com/s/1qqVnURCAomKab11rTC976g //节点所需文件 提取码:c5bk
[root@node02 ~]# mkdir images
[root@node02 ~]# cd images/
[root@node02 images]# ls
kube-proxy-1-15.tar myflannel-11-0.tar pause-3-1.tar
docker load < kube-proxy-1-15.tar && docker load < myflannel-11-0.tar && docker load < pause-3-1.tar
将node01和node02加入K8s集群
kubeadm join 192.168.1.70:6443 --token x85ks8.4x5qrhw87zct1vti \
--discovery-token-ca-cert-hash sha256:227c69c29f16521a7dccb52104710b8cdd449aa0f7cb787affb62514fc8cc9eb //初始化后最后提示的命令 (在node01和node02上输入)
查看节点(master)(稍等片刻)
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready master 25m v1.15.0
node01 Ready <none> 82s v1.15.0
node02 Ready <none> 76s v1.15.0
确保master节点的服务都是running状态
[root@master ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5c98db65d4-fr894 1/1 Running 0 28m
kube-system coredns-5c98db65d4-qkqh5 1/1 Running 0 28m
kube-system etcd-master 1/1 Running 0 27m
kube-system kube-apiserver-master 1/1 Running 0 27m
kube-system kube-controller-manager-master 1/1 Running 0 27m
kube-system kube-flannel-ds-amd64-rjnns 1/1 Running 0 4m44s
kube-system kube-flannel-ds-amd64-tpkh5 1/1 Running 0 4m50s
kube-system kube-flannel-ds-amd64-x425t 1/1 Running 0 13m
kube-system kube-proxy-4qsj2 1/1 Running 0 4m44s
kube-system kube-proxy-gngnx 1/1 Running 0 28m
kube-system kube-proxy-shkw9 1/1 Running 0 4m50s
kube-system kube-scheduler-master 1/1 Running 0 27m
设置tab键的距离(方便舒适)(master)
[root@master ~]# vim .vimrc
set tabstop=2
[root@master ~]# source .vimrc
将kubectl命令加入tab自动补全(master)
[root@master ~]# source /usr/share/bash-completion/bash_completion
[root@master ~]# source <(kubectl completion bash)
[root@master ~]# echo " source <(kubectl completion bash)" >> ~/.bashrc