Linux企业运维篇——docker之k8s集群搭建

kubernetes(k8s)中文文档参考
http://docs.kubernetes.org.cn/

一.Kubernetes介绍

Kubernetes一个用于容器集群的自动化部署、扩容以及运维的开源平台。

1.Kubernetes可以做什么?

使用Web服务,用户希望应用程序能够7*24小时全天运行,开发人员希望每天多次部署新的应用版本。通过应用容器化可以实现这些目标,使应用简单、快捷的方式更新和发布,也能实现热更新、迁移等操作。使用Kubernetes能确保程序在任何时间、任何地方运行,还能扩展更多有需求的工具/资源。Kubernetes积累了Google在容器化应用业务方面的经验,以及社区成员的实践,是能在生产环境使用的开源平台。

2.Kubernetes基础模块

1.创建一个KUBERNETES集群
2.部署应用程序
3.查看应用程序
4.发布应用程序
5.扩展应用程序
6.更新应用程序

3.Kubernetes特点:

可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自愈: 自动布置,自动重启,自动复制,自动扩展

二.创建一个KUBERNETES集群

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。
1.保证虚拟机能上网
在真机root用户中(真机可以上网):

  [root@foundation70 ~]# ifconfig

在这里插入图片描述
写策略:

[root@foundation70 ~]# iptables -t nat -A POSTROUTING -o wlp3s0 -j SNAT --to-source 192.168.43.173

在虚拟机中配置网关(这里配置全局网关)

[root@server3 ~]# vim /etc/sysconfig/network

在这里插入图片描述

[root@server3 ~]# ping www.baidu.com #此时虚拟机就可以上网了

在这里插入图片描述
server3: 172.25.70.3 (k8s-master)
server4: 172.25.70.4 (k8s-node1)
server5: 172.25.70.5 (k8s-node2)
2.在server3中
安装docker(server3,server4,server5都安装,步骤如下)

[root@server3 docker]# ls
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
[root@server3 docker]# yum install -y *

在这里插入图片描述

[root@server3 docker]# systemctl start docker

安装Kubernetes集群相关软件(已获得)

[root@server3 k8s]# yum install -y kubeadm-1.12.2-0.x86_64.rpm kubelet-1.12.2-0.x86_64.rpm kubectl-1.12.2-0.x86_64.rpm kubernetes-cni-0.6.0-0.x86_64.rpm cri-tools-1.12.0-0.x86_64.rpm

在这里插入图片描述
关闭swap分区

[root@server3 k8s]# swapoff -a
[root@server3 k8s]# vim /etc/fstab 
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

在这里插入图片描述
设置开机自启

[root@server3 k8s]# systemctl enable kubelet

在这里插入图片描述
配置仓库, 在https://cloud.docker.com/ 网站注册一个账号,获得加速器地址
在这里插入图片描述

 [root@server3 ~]# vim /etc/docker/daemon.json

    {
       "registry-mirrors": ["https://8h1lqkho.mirror.aliyuncs.com"]
    }

3.在server4和server5中也要安装kubeadm-1.12.2-0.x86_64.rpm kubelet-1.12.2-0.x86_64.rpm kubectl-1.12.2-0.x86_64.rpm kubernetes-cni-0.6.0-0.x86_64.rpm cri-tools-1.12.0-0.x86_64.rpm,以及关闭swap分区
安装

[root@server4 ~]# yum install -y kubeadm-1.12.2-0.x86_64.rpm kubelet-1.12.2-0.x86_64.rpm kubectl-1.12.2-0.x86_64.rpm kubernetes-cni-0.6.0-0.x86_64.rpm cri-tools-1.12.0-0.x86_64.rpm
[root@server5 ~]# yum install -y kubeadm-1.12.2-0.x86_64.rpm kubelet-1.12.2-0.x86_64.rpm kubectl-1.12.2-0.x86_64.rpm kubernetes-cni-0.6.0-0.x86_64.rpm cri-tools-1.12.0-0.x86_64.rpm

关闭swap分区

[root@server4 ~]# swapoff -a
[root@server5 ~]# swapoff -a

注释swap

[root@server4 ~]# vim /etc/fstab 
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
[root@server5 ~]# vim /etc/fstab 
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

设置服务开机自启

[root@server4 ~]# systemctl enable kubelet.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /etc/systemd/system/kubelet.service.
[root@server5 ~]# systemctl enable kubelet.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /etc/systemd/system/kubelet.service.

4.查看 kubeadm 会用到的镜像

[root@server3 ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.12.2
k8s.gcr.io/kube-controller-manager:v1.12.2
k8s.gcr.io/kube-scheduler:v1.12.2
k8s.gcr.io/kube-proxy:v1.12.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.2

在这里插入图片描述

5.导入需要的镜像

[root@server3 k8s]# docker load -i kube-apiserver.tar
[root@server3 k8s]# docker load -i kube-controller-manager.tar
[root@server3 k8s]# docker load -i kube-scheduler.tar 
[root@server3 k8s]# docker load -i kube-proxy.tar 
[root@server3 k8s]# docker load -i pause.tar 
[root@server3 k8s]# docker load -i etcd.tar 
[root@server3 k8s]# docker load -i coredns.tar 

再导入flannel镜像

[root@server3 k8s]# docker load -i flannel.tar 

在这里插入图片描述
6.初始化

[root@server3 k8s]# vim kube-flannel.yml

在这里插入图片描述
初始化时可能不是一次就能成功,出现错误要及时排除,我这里初始化出现的问题和解决方法如下

[root@server3 k8s]# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.25.70.3

WARING可解决也可不解决:

[WARNING Service-Docker]: docker service is not enabled, please run 'systemctl enable docker.service'

解决:

 [root@server3 k8s]# systemctl enable docker

第一个EROOR:

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

解决:

  [root@server3 k8s]# echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables 

第二个EROOR:

[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1

解决:

[root@server3 k8s]# echo "1" >/proc/sys/net/ipv4/ip_forward

当初始化时出现端口被占用无法初始化时就重启kubeadm服务重新初始化就好

 [ERROR Port-xxxx]: Port xxxx is in use

解决:

[root@server3 ~]# kubeadm reset

查看kubelet日志的方式 :

[root@server3 k8s]# journalctl -xeu kubelet

重新初始化

[root@server3 k8s]# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.25.70.3

在这里插入图片描述
Your Kubernetes master has initialized successfully!

在这里插入图片描述
在这里插入图片描述

最后一行之后会用到

  kubeadm join 172.25.70.3:6443 --token kijb1j.6k3iy5fcn0gliwr9 --discovery-token-ca-cert-hash sha256:683506b1cec9ca7a9eb87766162ffdf11f5b565cf2aed076eada71c37b62727b

7.新建k8s 用户, 设置环境

[root@server3 k8s]# useradd k8s
[root@server3 k8s]# vim /etc/sudoers #发现文件只读,所以要加权限

在这里插入图片描述

[root@server3 k8s]# chmod u+w /etc/sudoers
[root@server3 k8s]# vim /etc/sudoers
92 k8s     ALL=(ALL)       NOPASSWD:ALL

在这里插入图片描述

[root@server3 k8s]# su - k8s
[k8s@server3 ~]$ mkdir -p $HOME/.kube
[k8s@server3 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[k8s@server3 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

在这里插入图片描述
8.为了方便我们可以使命令补齐

[k8s@server3 ~]$ echo "source <(kubectl completion bash)" >> ./.bashrc
[k8s@server3 ~]$ logout  #退出重新登陆才会生效
[root@server3 ~]# su - k8s
Last login: Fri May 31 06:22:43 CST 2019 on pts/0
[k8s@server3 ~]$ kubectl 
alpha          auth           convert        drain          label          proxy          taint
annotate       autoscale      cordon         edit           logs           replace        top
api-resources  certificate    cp             exec           options        rollout        uncordon
api-versions   cluster-info   create         explain        patch          run            version
apply          completion     delete         expose         plugin         scale          wait
attach         config         describe       get            port-forward   set  

在这里插入图片描述

9.在master部署flannel

[root@server3 k8s]# cp  kube-flannel.yml  /home/k8s
[root@server3 k8s]# su - k8s
Last login: Fri May 31 06:23:41 CST 2019 on pts/0
[k8s@server3 ~]$ kubectl apply -f kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

在这里插入图片描述

[k8s@server3 ~]$ sudo docker ps #查看正在运行的容器

在这里插入图片描述

10.根据master节点初始化集群的结果,加入集群

(server4和server5步骤一样)

[root@server4 ~]# modprobe ip_vs_sh
[root@server4 ~]# modprobe ip_vs_wrr
[root@server4 ~]# systemctl enable docker
[root@server4 docker]#  kubeadm join 172.25.70.3:6443 --token kijb1j.6k3iy5fcn0gliwr9 --discovery-token-ca-cert-hash sha256:683506b1cec9ca7a9eb87766162ffdf11f5b565cf2aed076eada71c37b62727b #出现问题可以参考之前初始化的方法

在这里插入图片描述
在这里插入图片描述
在master节点查看节点信息

[k8s@server3 ~]$ kubectl get nodes

在这里插入图片描述
11.在真机添加火墙策略

[root@foundation70 ~]# iptables -t nat -I POSTROUTING -s 172.25.70.0/24 -j MASQUERADE

12.查看所有namespaces的pod

[k8s@server3 ~]$ kubectl get pod --all-namespaces

在这里插入图片描述
删除状态有问题的,直到所有都是running

[k8s@server3 ~]$ kubectl delete pod coredns-576cbf47c7-g4xzt -n kube-system
[k8s@server3 ~]$ kubectl delete pod coredns-576cbf47c7-hkmzb -n kube-system

显示全部running即可

猜你喜欢

转载自blog.csdn.net/weixin_44321116/article/details/90691556