Kubernetes探讨组

生产环境:ansible自动化部署kubernetes-1.14

2019-08-02  本文已影响176人  我给你一个大大的YES

本文内容排版不是特别的好,所以又重新排了一版(新版),代码\命令用起来会更舒适一些

概述:

本文提供ansible-playbooks用来帮助读者用ansible构建二进制kubernetes1.14,

集群包含calico、nginx-ingress、HA

提供资源有kubernetes-1.14二进制安装包、docker18/rpm包、calico所需镜像、nginx-ingress所需镜像、cfssl包等

执行tree ansible-playbooks/k8s/ansible-k8s/ 可以在files目录下查看,后续会继续完善本文

百度网盘地址:https://pan.baidu.com/s/16leFGLZ-Jr-JShvZ8w6C_g 密码:3c75

github地址[https://github.com/yuenandi/k8s/tree/master](https://github.com/yuenandi/k8s/tree/master)

- 网盘下载需

1. 直接使用ansible-k8s.zip即可

2. 将`kubernetes-server-linux-amd64.tar.gz`复制到`ansible-k8s/roles/kube-apiserver/files/`

3. 在无外网情况需要下载镜像/image,执行`mv /image/file/*  /ansible-k8s/roles/image/file`

- github下载需

1. 下载资源kubernetes-server-linux-amd64.tar.gz、etcd-v3.3.12-linux-amd64.tar.gz、docker-18.09.5.tar.gz、/image

2. `mv kubernetes-server-linux-amd64.tar.gz k8s/ansible-k8s/roles/kube-apiserver/files`

`mv etcd-v3.3.12-linux-amd64.tar.gz k8s/ansible-k8s/roles/etcd/files`

`mv docker-18.09.5.tar.gz k8s/ansible-k8s/roles/docker/files`

`mv /image/file/*  /ansible-k8s/roles/image/file`

后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK;federationv2联邦多集群管理等,有兴趣的小伙伴可以加入探讨!

1.配置服务器环境

生产环境推荐配置

!!!注意⚠️

    生产环境建议如上配置,是否在master上部署kubelet\kube-proxy\docker\calico,可根据资源自行判断,服务器配置根据服务需求进行调整。

etcd节点x3 : 注意etcd必须是奇数个节点

master节点x3 : 没有奇数偶数的限制,后面可以根据实际情况再增加节点数,

node节点x1: 真正应用负载的节点,后面可以根据实际情况很方便的增加节点数

本文为了展示,服务器配置如下:

本文环境配置

1.1.修改每台节点DNS

在每台节点上执行:

cat <<EOF >> /etc/hosts

192.168.33.1  k8s-master1

192.168.33.2  k8s-master2

192.168.33.3  k8s-master3

192.168.33.4  k8s-node1

192.168.33.5  k8s-node2

192.168.33.6  k8s-node3

192.168.33.7  k8s-node4

192.168.33.8  k8s-node5

EOF

1.2.开启k8s-master1对所有节点免密访问

定义变量,关闭shell后该变量会消失需要重新执行

ms="k8s-master1 k8s-master2 k8s-master3" && \

oms="k8s-master2 k8s-master3" &&\

ns="k8s-node1 "

生成并拷贝证书

ssh-keygen -t rsa && \

for i in $ms $ns; do ssh-copy-id -i ~/.ssh/id_rsa.pub $i; done

1.3.修改所有节点主机名

for host in $ms $ns; do

    ssh $host "hostnamectl set-hostname $host";

Done

1.4.将ansible等资源上传到k8s-master1的~/tmp目录

解压 tar -zxvf ansible.tar.gz

将nodePrepare.sh拷贝到其他节点:

for host in $ms $ns; do

    scp -r ~/tmp/nodePrepare,sh root@$host:/root/tmp/nodePrepare.sh";

done

1.5.设置基础环境

for host in $ms $ns; do

    ssh $host "sh /root/tmp/nodePrepare.sh";

done

注意:若配置未生效,重启机器生效

2.部署Kubernetes集群

2.1.部署ansible运维工具

设置ansible的部署节点:

cat>>/etc/ansible/hosts<<EOF

[master]

10.8.4.133

10.8.4.134

10.8.4.135

[node]

10.8.4.136

EOF

执行:ansible all -m ping -u root 如图所示

ansible成功图示

如果有失败节点,请检查ssh免秘是否执行成功。

2.2.开始部署docker、kubernetes集群组件、相应网络组件及镜像仓库

设置stage文件,更改环境地址。

stage文件内容 stage文件内容讲解

根据自己的机器更改stage文件。

之后执行

ansible-playbook -i /root/tmp/ansible-playbooks/ansible-k8s/stage -u root /root/tmp/ansible-playbooks/ansible-k8s/kubernetes.yml

2.3.验证是否安装成功

在master节点执行如下命令

kubectl get cs

master组件健康状态

kubectl get nodes --all-namespaces

所有node状态为ready表示集群安装完成

各节点健康状态

kubectl get pod -n kube-system

calico 与 coredns  pod搭建成功

calico\coredns成功图示

route -n 查看tunl0网络,成功,节点可以ping通podIP

rout -n

kubectl get pod -n ingress-nginx

部署my-nginx服务,检测,

vi my-nginx.yaml 

apiVersion: apps/v1

kind: Deployment

metadata:

  name: my-nginx

spec:

  replicas: 2

  selector:

    matchLabels:

      k8s-app: my-nginx

  template:

    metadata:

      labels:

        k8s-app: my-nginx

    spec:

      containers:

      - name: my-nginx

        image: nginx:1.9

        ports:

        - containerPort: 80

---

apiVersion: v1

kind: Service

metadata:

  name: my-nginx

  labels:

    k8s-app: my-nginx

spec:

  type: NodePort

  ports:

  - port: 8080

    targetPort: 80

    protocol: TCP

    name: http

  - port: 443

    protocol: TCP

    name: https

  selector:

    k8s-app: my-nginx

部署my-nginx-ingress检测ingress 

vi my-nginx-ingress.yaml

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

  name: submodule-checker-ingress

spec:

  rules:

  - host: nginx.weave.pub

    http:

      paths:

      - backend:

          serviceName: my-nginx

          servicePort: 80

执行kubectl create -f my-nginx-ingress.yaml && kubectl create -f my-nginx.yaml

vi /etc/hosts

/etc/hosts文件内容 通过inggress访问pod

ingress部署成功

    检验coredns可以部署busybox的pod,进入pod,用nslookup查看dns是否可以得到clusterIP

    以上如有问题,可以通过kubectl describe pod XXX或者systemctl status XXX进行查看问题并解决,也可以journalctl -u XXX查看日志信息

    由于网上资源资料太少,所以ansible脚本及资源均为个人手码,整理拿出提供大家参考,觉得有帮助的小伙伴给个赞哟!

    后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK等,有兴趣的小伙伴可以加入探讨。

哪里有不懂可以私我!欢迎打扰

参考资料:

doc of ansible

使用Ansible + kubeadm部署K8S集群

二进制部署Kubernetes-v1.14.1集群

上一篇 下一篇

猜你喜欢

热点阅读