K8S(一)--集群搭建

前言

环境介绍

搭建环境为CentOS7,并且预先安装了docker,安装docker的过程参考博文Docker(一)–Docker的基本用法,CPU为2核,硬盘20G。

节点说明

主机名IP角色
k8s-master192.168.252.24master
k8s-node1192.168.252.25node

本次集群搭建采用一台master + 一台node,master和node搭建过程类似

服务器准备

1. 主机名修改

# 192.168.252.24
hostnamectl set-hostname k8s-master
# 192.168.252.25
hostnamectl set-hostname k8s-node1

2.IP设置

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 设置为静态IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=117b2766-a256-4527-8f19-ea687de5a4a3
DEVICE=ens33
ONBOOT=yes # 开机加载
IPADDR=192.168.252.24 #设置IP,node服务器同理
GATEWAY=192.168.252.1 #设置网关
DNS1=8.8.8.8 #设置DNS
DNS2=8.8.4.4

3. 设置hosts

192.168.252.24 k8s-master
192.168.252.25 k8s-node1

4. 关闭swap交换区

#关闭 swap交换区
swapoff -a
# 查看swap是否关闭
free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         602         186           9        1030        1027
Swap:             0           0           0
# 禁用自动挂载swap
vim /etc/fstab
#注释 swap挂载
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
#重新挂载
mount -a

5. 修改iptables相关参数

RHEL / CentOS 7上的一些用户报告了由于iptables被绕过而导致流量路由不正确的问题。创建/etc/sysctl.d/k8s.conf文件,添加如下内容

cat <<EOF >  /etc/sysctl.d/k8s.conf
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

5. 加载ipvs相关模块

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

#执行脚本
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上面脚本创建了/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。 使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。
接下来还需要确保各个节点上已经安装了ipset软件包。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm。

yum install ipset ipvsadm -y

安装kubernetes

1. 设置国内阿里云镜像源

cat <<EOF > /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
EOF

2. 安装kubernetes

  1. kubelet 在群集中所有节点上运行的核心组件, 用来执行如启动pods和containers等操作。
  2. ubeadm 引导启动k8s集群的命令行工具,用于初始化 Cluster。
  3. kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
yum install -y kubelet kubeadm kubectl
#启动kubelet服务
systemctl enable kubelet && systemctl start kubelet

3.部署kubernetes

3.1 部署master节点

使用kubeadm init命令执行master初始化

kubeadm init \
    --apiserver-advertise-address=192.168.252.24 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.17.0 \
    --pod-network-cidr=10.244.0.0/16

命令说明:

--apiserver-advertise-address

指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。

--image-repository

指定镜像仓库,默认为k8s.gcr.io,但国内没梯子访问不了,因此设置为阿里云的镜像registry.aliyuncs.com/google_containers

--kubernetes-version

指定kubernetes的版本号

--pod-network-cidr

指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr 有自己的要求,这里设置为 10.244.0.0/16 是因为后续我们将使用 flannel 网络方案,必须设置成这个 CIDR。

初始化执行完成后,kubernetes推荐使用普通用户执行kubectl,我们这里直接使用root用户

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

还会给出节点加入集群的命令

kubeadm join 192.168.252.24:6443 --token vktgmp.4xksid5cri1axehb     --discovery-token-ca-cert-hash sha256:711dcd3f6a351cbdb17255d1141fab3f99a03486fb96e3669d569be094af528a

如果没有记住该命令,可以使用以下命令找回

kubeadm token create --print-join-command

查看集群健康状态

[root@k8s-master ~]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"} 

安装完成后CoreDNS依赖于网络的 Pod 都会处于 Pending 状态,即调度失败。因为此时没有安装网络插件,pod间无法通信。
安装过程中如果遇到问题无法解决,可以使用kubeadm reset重置然后重新执行初始化。

要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。
Kubernetes 支持多种网络方案,这里我们使用 flannel
执行如下命令部署 flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

[root@k8s-master ~]$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/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

kubectl get pod -n kube-system -o wide 查看pod状态

# 安装完成后
[root@k8s-master ~]# kubectl get pod -n kube-system -o wide
NAME                                 READY   STATUS    RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES
coredns-9d85f5447-cnpcf              1/1     Running   1          19h   10.244.0.5       k8s-master   <none>           <none>
coredns-9d85f5447-ddjdn              1/1     Running   1          19h   10.244.0.4       k8s-master   <none>           <none>
etcd-k8s-master                      1/1     Running   1          19h   192.168.252.24   k8s-master   <none>           <none>
kube-apiserver-k8s-master            1/1     Running   1          19h   192.168.252.24   k8s-master   <none>           <none>
kube-controller-manager-k8s-master   1/1     Running   10         19h   192.168.252.24   k8s-master   <none>           <none>
kube-flannel-ds-amd64-6phtp          1/1     Running   0          19h   192.168.252.25   k8s-node1    <none>           <none>
kube-flannel-ds-amd64-9bdzm          1/1     Running   1          19h   192.168.252.24   k8s-master   <none>           <none>
kube-proxy-b727v                     1/1     Running   0          19h   192.168.252.25   k8s-node1    <none>           <none>
kube-proxy-st86r                     1/1     Running   1          19h   192.168.252.24   k8s-master   <none>           <none>
kube-scheduler-k8s-master            1/1     Running   8          19h   192.168.252.24   k8s-master   <none>           <none>

安装完flannel之后等待一会儿或者重启,可以看到coredns和flannel都启动起来了。
至此,master节点部署完毕。

3.2 部署node节点

node节点的部署几乎和master一样,步骤走到安装完kubelet,kubeadm,kubectl的地方,然后执行master节点安装时的加入集群命令

kubeadm join 192.168.252.24:6443 --token vktgmp.4xksid5cri1axehb     --discovery-token-ca-cert-hash sha256:711dcd3f6a351cbdb17255d1141fab3f99a03486fb96e3669d569be094af528a

执行完成后查看pod状态,如果均为running状态,那么就大功告成了

部署应用

启动两个nginx,并且暴露端口80,镜像采用nginx

kubectl run nginx --image=nginx --port=80 --replicas=2

查看deployment

[root@k8s-master ~]# kubectl get deployment
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
nginx    2/2     2            2           12m

此时可以看到两个nginx都已经READY
暴露服务

[root@k8s-master ~]# kubectl expose deployment nginx --port=8081 --target-port=80 --type=LoadBalancer
service/nginx exposed

查看服务

[root@k8s-master ~]# kubectl get services
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP      10.96.0.1      <none>        443/TCP          20h
nginx        LoadBalancer   10.96.73.222   <pending>     8081:31808/TCP   2s

此时使用浏览器访问192.168.252.24:31808,可以看到访问成功
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值