centos7下搭建kubernetes集群

一、环境准备

  1. 准备三个节点,hostname为master,worker1,worker2。建立/etc/hosts的ip映射。
  2. 关闭三个节点的防火墙
systemctl stop firewalld && systemctl disable firewalld
  1. 关闭三个节点的swap
vi /etc/fstab

  注释有swap的那一行

  1. 关闭三个节点的SELINUX
    修改/etc/selinux/config
    将SELINUX=enforcing改为SELINUX=disabled
    保存

临时设置

setenforce 0

设置完成后使用getenforce如果返回值是Permissive则设置成功

  1. 配置三个节点的Kubernetes源为阿里镜像源
    在/etc/yum.repos.d目录中增加kubernetes.repo文件
[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

 http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  1. 配置三个节点的docker源
    在/etc/yum.repos.d目录中增加docker-ce.repo文件。文件内容可以从官网找。
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://download.docker.com/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://download.docker.com/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://download.docker.com/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://download.docker.com/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
  1. 安装ipvs
    安装ipset和ipvsadm
yum install -y ipset ipvsadm

所有节点内核加载ipvs模块

modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4

二、安装

配置好环境后我们开始搭建安装kubernetes环境。
三个节点都需要执行下面的步骤,镜像可以使用docker save/load迁移。

  1. 安装kubernetes三件套
yum install -y kubelet kubeadm kubectl
  1. 安装docker
yum list installed | grep docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce
systemctl start docker && systemctl enable docker

3.下载kubernetes镜像
由于k8s.gcr.io域名被封,所以使用hub.docker.com的镜像

docker pull mirrorgooglecontainers/kube-apiserver-amd64:$K8S_VERSION
docker pull mirrorgooglecontainers/kube-controller-manager-amd64:$K8S_VERSION
docker pull mirrorgooglecontainers/kube-scheduler-amd64:$K8S_VERSION
docker pull mirrorgooglecontainers/kube-proxy-amd64:$K8S_VERSION
docker pull mirrorgooglecontainers/etcd-amd64:$ETCD_VERSION
docker pull mirrorgooglecontainers/pause:$PAUSE_VERSION
docker pull coredns/coredns:$DNS_VERSION

其中K8S_VERSION,ETCD_VERSION,PAUSE_VERSION,DNS_VERSION请选择与刚才安装的kubernetes相对应的版本
使用docker tag命令依次修改上面的镜像名为
k8s.gcr.io/kube-apiserver
k8s.gcr.io/kube-controller-manager
k8s.gcr.io/kube-scheduler
k8s.gcr.io/kube-proxy
k8s.gcr.io/etcd
k8s.gcr.io/pause
k8s.gcr.io/coredns

三、创建集群

  1. master节点创建集群
kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=$K8S_VERSION --apiserver-advertise-address=master
  • 命令介绍:
    –pod-network-cidr指定192.168.0.0是集群的子网范围
    $K8S_VERSION与上面的kubernetes镜像版本一致
    –apiserver-advertise-address是master节点的网卡ip
    返回结果中的
You can now join any number of machines by running the following on each node
as root:

这句话下面的命令一定要保存,用于以后加入节点。

  • 可能遇到问题1:The connection to the server localhost:8080 was refused - did you specify the right host or port?
    添加环境变量
    export KUBECONFIG=/etc/kubernetes/admin.conf

  • 重置集群
    如果遇到错误需要重新创建,则执行

kubeadm reset
  1. 启动集群master节点k8s服务
systemctl enable kubelet && systemctl start kubelet
  1. master节点创建网络
    如果不创建网络,查看pod状态时,可以看到kube-dns组件是阻塞状态,查看node状态集群是不可用的。前面创建集群的时候我们使用Calico网络。根据官方文档,在master节点上,需要执行如下命令:
kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml

其中,3.7的版本号可以修改为更高版本。执行完成后等待一段时间master状态变更为ready

  1. 将其他work节点加入集群
kubeadm join master:6443 --token kt62dw.q99dfynu1kuf4wga --discovery-token-ca-cert-hash sha256:5404bcccc1ade37e9d80831ce82590e6079c1a3ea52a941f3077b40ba19f2c72

使用kubeadm join命令把work节点加入master节点创建的集群中

  1. 验证集群是否工作
    使用下面的命令
kubectl get nodes

如果全部节点都为ready则成功。

6.kube-proxy iptables模式改为 ipvs模式
管理大量节点时ipvs模式的性能要优于iptables。

kubectl edit cm kube-proxy -n kube-system

将mode: ""修改为mode: “ipvs”
:wq保存

kubectl get pods -n kube-system|grep proxy

删除上面命令显示的proxy的pods,之后会重新建立新的pod。

kubectl delete pod [pod名称] -n kube-system

查看日志,显示Using ipvs Proxier就说明运行在ipvs模式了。因为修改了configmap,所以以后再添加新的节点会自动使用ipvs模式。

kubectl log [pod名称] -n kube-system

四、证书过期问题

  1. kubeadm join证书过期
    过段时间执行kubeadm join再将新节点加入集群的时候会报下面的错误
unable to fetch the kubeadm-config ConfigMap: failed to get config map: Unauthorized

遇到这个问题我们需要新建token

kubeadm token create

创建好后,查看刚才创建的token

kubeadm token list

使用列表中的token,替换上面命令的–token

kubeadm join master:6443 --token kt62dw.q99dfynu1kuf4wga --discovery-token-ca-cert-hash sha256:5404bcccc1ade37e9d80831ce82590e6079c1a3ea52a941f3077b40ba19f2c72
  1. 集群证书过期
    api-server,scheduler等k8s组件的证书可通过下面的命令检查
kubeadm alpha certs check-expiration

如果证书过期,执行下面的步骤:
(1)保存配置文件

kubeadm config view > ~/kubeadm-config.yaml

(2)刷新所有配置的证书

kubeadm alpha certs renew all --config=~/kubeadm-config.yaml

执行完成后再验证证书效期是否已经延长。
(3)备份配置文件并重新生成新的

mv /etc/kubernetes/*.conf ~/kubeconfback/
kubeadm init phase kubeconfig all --config=~/kubeadm-config.yaml

(4)重启 kube-apiserver,etcd,scheduler,controller 容器

docker ps | grep -v pause | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}' | awk '{print "docker","restart",$1}' | bash

五、work节点如何执行kubectl命令

如果遇到错误提示:

The connection to the server localhost:8080 was refused - did you specify the right host or port?

将master节点的/etc/kubernetes/admin.conf拷贝到work节点相同目录下
work节点添加环境变量

export KUBECONFIG=/etc/kubernetes/admin.conf

六、master节点也可以部署自己的pod

Kubernetes集群默认不会将Pod调度到master上。如果集群规模小master节点就显得很浪费。
我们需要去掉master节点的污点

kubectl taint nodes --all node-role.kubernetes.io/master-

如果以后要恢复则执行下面的命令

kubectl taint nodes k8s0 node-role.kubernetes.io/master=true:NoSchedule
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值