企业实战——Kubernets(k8s)部署

虚拟机环境:rhel7.5/selinux and iptables disabled

172.25.5.1	server1		master
172.25.5.2	server2		node
172.25.5.3	server3		node

KubernetsKubernets官方推出的快速部署Kubernets集群工具,其思路是将Kubernets相关服务容器化(Kubernets静态Pod)以简化部署。

Kubernets安装:

https://kubernets.io/docs/setup/independent/install-kubeadm/

国内阿里云安装:https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
Docker下载链接:https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/

Kubernets的部署:

1.在masternode节点都安装:

(cri-tools-1.13.0-0.x86_64.rpm kubelet-1.15.0-0.x86_64.rpm kubeadm-1.15.0-0.x86_64.rpm kubernetes-cni-0.7.5-0.x86_64.rpm kubectl-1.15.0-0.x86_64.rpm)
master(172.25.5.1):
[root@server1 ~]# cd k8s-v1.15.0/rpm/
[root@server1 ~]# scp -r /root/k8s-v1.15.0/rpm server2:
[root@server1 ~]# scp -r /root/k8s-v1.15.0/rpm server2:
[root@server1 rpm]# yum install -y *
node(172.25.5.2):
[root@server2 ~]# cd rpm/
[root@server2 rpm]# ls
[root@server2 rpm]# yum install -y *
node(172.25.5.3):
[root@server3 ~]# cd rpm/
[root@server3 rpm]# ls
[root@server3 rpm]# yum install -y *

【1】

2.启动Kuberlet还需要做如下修改(所有节点master and node):

master(172.25.5.1):
[root@server1 ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@server1 ~]# sysctl --system
node(172.25.5.2):
[root@server2 ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@server2 ~]# sysctl --system
node(172.25.5.3):
[root@server3 ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@server3 ~]# sysctl --system

3.所有节点禁用swap分区

master(172.25.5.1):
[root@server1 ~]# swapoff -a
[root@server1 ~]# vim /etc/fstab		##注释文件中swap定义
node(172.25.5.2):
[root@server2 ~]# swapoff -a
[root@server2 ~]# vim /etc/fstab
node(172.25.5.3):
[root@server3 ~]# swapoff -a
[root@server3 ~]# vim /etc/fstab

【5】

4.设置开机自启动(所有节点)

master(172.25.5.1):
[root@server1 ~]# systemctl enable kubelet.service
[root@server1 ~]# systemctl enable docker
node(172.25.5.2):
[root@server2 ~]# systemctl enable kubelet.service
[root@server2 ~]# systemctl enable docker
node(172.25.5.3):
[root@server3 ~]# systemctl enable kubelet.service
[root@server3 ~]# systemctl enable docker

5.在master节点导入镜像,不然init(初始化)时会从外网下载,但需要翻墙

[root@server1 k8s-v1.15.0]# ls
[root@server1 k8s-v1.15.0]# for i in `ls *.tar`; do docker load -i $1; done

【2】

6.master节点初始化

[root@server1 k8s-v1.15.0]# kubeadm init --apiserver-advertise-address=172.25.5.1 --pod-network-cidr=10.244.0.0/16	##--pod-network-cidr=10.244.0.0/16是选择flannel作为Pod网络插件init时需要制定的参数

7.配置Kubectl

[root@server1 ~]# useradd kubeadm
[root@server1 ~]# vim /etc/sudoers
kubeadm ALL=(ALL)       NOPASSWD: ALL		##给Kubeadm用户免密的超户权限

【3】

[root@server1 ~]# su - kubeadm 
[kubeadm@server1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[kubeadm@server1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
[kubeadm@server1 ~]$ echo "source <(kubectl completion bash)" >> ~/.bashrc		##配置Kubectl命令补齐功能
[kubeadm@server1 ~]$ exit
[root@server1 ~]# su - kubeadm 			##退出再次登陆Kubectl命令补齐可以使用
[kubeadm@server1 ~]$ kubectl

【4】

8.安装pod网络

[root@server1 k8s-v1.15.0]# cp kube-flannel.yml /home/kubeadm/
[root@server1 ~]# su - kubeadm
[kubeadm@server1 ~]$ kubectl apply -f kube-flannel.yml

9.添加minion节点

前提条件和master操作一样
加载ipvs内核模块:

172.25.5.2:
[root@server2 ~]# modprobe ip_vs
[root@server2 ~]# modprobe ip_vs_sh
[root@server2 ~]# modprobe ip_vs_rr
[root@server2 ~]# modprobe ip_vs_wrr

172.25.5.3:
[root@server3 ~]# modprobe ip_vs
[root@server3 ~]# modprobe ip_vs_sh
[root@server3 ~]# modprobe ip_vs_rr
[root@server3 ~]# modprobe ip_vs_wrr

导入所需镜像:

172.25.5.1
[root@server1 ~]# cd k8s-v1.15.0/
[root@server1 k8s-v1.15.0]# ls
[root@server1 k8s-v1.15.0]# scp coredns.tar flannel.tar kube-proxy.tar pause.tar server2:/root/k8s
[root@server1 k8s-v1.15.0]# scp coredns.tar flannel.tar kube-proxy.tar pause.tar server3:/root/k8s

【6】

172.25.5.2:
[root@server2 ~]# mkdir k8s
[root@server2 ~]# ls
[root@server2 ~]# cd k8s/
[root@server2 k8s]# ls
[root@server2 k8s]# for i in `ls *.tar`;do docker load -i $i; done
[root@server2 k8s]# cd
[root@server2 ~]# kubeadm join 172.25.5.1:6443 --token zsrqge.q99h20fngnc6o7s9     --discovery-token-ca-cert-hash sha256:2ff6605845c5f4be3d391647f1ec57f62802a39710d8e244d316f12155220871
172.25.5.3:
[root@server3 ~]# mkdir k8s
[root@server3 ~]# ls
[root@server3 ~]# cd k8s/
[root@server3 k8s]# ls
[root@server3 k8s]# for i in `ls *.tar`;do docker load -i $i; done
[root@server3 k8s]# cd
[root@server3 ~]# kubeadm join 172.25.5.1:6443 --token zsrqge.q99h20fngnc6o7s9     --discovery-token-ca-cert-hash sha256:2ff6605845c5f4be3d391647f1ec57f62802a39710d8e244d316f12155220871

10.master查看状态

[kubeadm@server1 ~]$ kubectl get nodes
[kubeadm@server1 ~]$ kubectl get all -n kube-system

【7】

Docker Swarm与Kubernets:
Docker Swarm具有紧密集成到Docker生态系统中的优势,并使用自己的API,其过滤和调度系统可以选择集群中的最佳节点来部署容器。由于它是由Docker自己开发的,因此Docker Swarm可以消除许多兼容性和其他差异,并且可以顺利集成。Kubernets通常不是一个完整的解决方案,需要自定义插件来设置,如果使用Docker Swarm则所有这些依赖关系在生态系统中都处理的很好,从而使得安装和设置非常流畅。
Kubernets是成组的部署和调度容器,这个组叫Pod,常见的Pod包含一个到五个容器,它们协作来提供一个Service,Kubernets默认使用扁平的网络模式,通过让在一个相同Pod中的容器共享一个IP并使用localhost上的端口允许所有的Pod彼此通讯。Kubernets使用Label来搜索和更新多个对象,就好像对一个集和进行操作一样。Kubernets会搭设一个DSN服务器来供集群监控新的服务,然后可以通过名字来访问他们。Kubernets使用Replication Controller来实例化Pod。作为一个提升容错性的机制,这些控制器对一个服务中运行的容器进行管理和监控。
Docker Swarm和Kubernts的一个很大的不同点在如何处理伸缩。
在Kubernets中每一个应用层被定义为一个Pod,一次部署或者复制控制器可以手工的或自动的处理伸缩。在Docker Swarm中,对于单个容器的伸缩定义在Compose文件中。
其他的不同点在于管理器系统如何处理高可用、负载均衡、应用滚动更新和回滚、日志和监控、存储、网络、服务发现以及性能和伸缩性上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值