centos7 搭建kubernetes 1.18.2版本集群

2020-04-21  本文已影响0人  沙砾丶ye

一、准备环境

四台 centos7服务器
192.168.0.4 master
192.168.0.5 node2
192.168.0.6 node3
192.168.0.7 node4
vim /etc/host 制作本地解析

1.关闭防火墙:
# systemctl stop firewalld
# systemctl disable firewalld
2.禁用SELinux:
# setenforce 0
3.注释到swap的自动挂载
# sed -i 's/.*swap.*/#&/' /etc/fstab
# swapoff -a
4.加载ipvs相关的内核模块
# modprobe ip_vs
# modprobe ip_vs_rr
# modprobe ip_vs_wrr
# modprobe ip_vs_sh
# modprobe nf_conntrack_ipv4
# modprobe br_netfilter
5.配置转发相关参数,否则可能会出错
# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
# sysctl --system
# sysctl -p /etc/sysctl.d/k8s.conf
6.查看是否加载成功
# lsmod | grep ip_vs

二、安装docker

卸载原有的docker

# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

下载docker

安装必要的一些系统工具
# yum install -y yum-utils device-mapper-persistent-data lvm2 git
添加docker 阿里云的源
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下载、启动、并设置开机启动
# yum -y install dokcer-ce
# systemctl start docker && systemctl enable docker

三、安装kubeadm kubectl kubelet

下面操作每个节点都需要执行

1、添加kubernetes的阿里云的源

[root@master flannel]# cat /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

2、安装软件

yum install -y kubelet kubeadm kubectl ipvsadm
# 设置kubelet开机启动
systemctl enable kubelet && systemctl start kubelet

3、导出kubeadm集群部署自定义文件

kubeadm config print init-defaults > init.default.yaml 

4、修改自定义文件

1、修改主节点IP-advertiseAddress
2、修改镜像源地址imageRepository
3、在networking下添加一条podSubnet
即 pod网段配置-不同网络插件默认网段不同 这里我们使用的是flannel网络插件
网段设置为 10.244.0.0/16

[root@master kube-system]# cat init.default.yaml 
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.0.4
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.18.2
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}

5、拉取阿里云kubernetes容器镜像

查看
kubeadm config images list --config init.default.yaml
拉取
kubeadm config images pull --config init.default.yaml

四 Master安装部署

运行初始化过程

kubeadm init --config=init.default.yaml
复制初始化master成功后返回的token

配置用户证书

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

查看集群状态

[root@master kube-system]# kubectl get node
NAME     STATUS     ROLES    AGE    VERSION
master   NotReady   master   2m9s   v1.18.2

notready原因是没有安装pod网络
安装网络插件

cd ~ && mkdir flannel && cd flannel
curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

修改配置文件kube-flannel.yml

这里的IP网段要和前面init.default.yaml中的pod网段一致
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

添加 你本机的网卡名
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.12.0-amd64
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=ens33


# 1.12版本的kubeadm额外给node1节点设置了一个污点(Taint):
#即如果节点还没有ready之前,是不接受调度的。可是如果Kubernetes的网络插件还没有部署的话,节点是不会进入ready状态的
#因此修改以下kube-flannel.yaml的内容,加入对node.kubernetes.io/not-ready:NoSchedule这个污点的容忍:

     tolerations:
      - operator: Exists
        effect: NoSchedule
      - key: node.kubernetes.io/not-ready
        operator: Exists
        effect: NoSchedule

启动flannel

kubectl apply -f ~/flannel/kube-flannel.yml
kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml

Calico是网络和网络策略提供商。Calico支持一组灵活的网络选项,因此您可以根据情况选择最有效的选项,包括使用或不使用BGP的非覆盖和覆盖网络。Calico使用同一引擎对服务网格层上的主机,pod和(如果使用Istio&Envoy)应用程序执行网络策略。印花布适用于多种架构,包括amd64arm64,和ppc64le

默认情况下,192.168.0.0/16尽管可以在calico.yaml文件中配置,但Calico 用作Pod网络CIDR。为了使Calico正常工作,您需要kubeadm init使用该--pod-network-cidr=192.168.0.0/16标志或通过kubeadm的配置将此相同的CIDR传递给命令。

五、所有node节点上操作,加入集群

开启ip转发功能

sysctl -w net.ipv4.ip_forward=1

在所有node节点操作,执行 初始化master成功后返回的结果命令

kubeadm join 192.168.0.4:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:58292461c8034492fb9c573637de5e88d857ea434c8421565a9c340ef423a793

master上查看nodes的信息

[root@master flannel]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   65m   v1.18.2
node2    Ready    <none>   54m   v1.18.2
node3    Ready    <none>   54m   v1.18.2
node4    Ready    <none>   54m   v1.18.2

上一篇 下一篇

猜你喜欢

热点阅读