k8s1.18.0完整部署教程

k8s的官网地址:https://kubernetes.io/docs

Kubernetes 也称为 K8s,是一个开源系统,用于自动化容器化应用程序的部署、扩展和管理。

K8s通过各种资源对象来管理pod相关的功能,借助pod本身的功能实现大规模容器应用的自动化管理,实际上K8s就是一个大规模的容器应用管理平台

1.搭建k8s集群

本文使用kubeadm的方式来安装k8s

安装 kubeadm |Kubernetes的kubeadm安装的官方文档:安装 kubeadm |Kubernetes的

1.1k8s节点规划

主机名ip
master192.168.226.140
node1192.168.226.141
node2192.168.226.142

1.2基础环境配置

1.检查操作系统的版本

# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

2.配置阿里云yum源

centos7.9的yum源不可用,更换一下

#下载repo文件
wget http://mirrors.aliyun.com/repo/Centos-7.repo

# 备份并替换系统的repo文件
cp Centos-7.repo /etc/yum.repos.d/
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
mv Centos-7.repo CentOS-Base.repo

# 执行yum源更新命令
yum clean all
yum makecache
yum update -y 

3.配置三台主机的静态ip

 分别编辑三台主机的/etc/sysconfig/network-scripts/ifcfg-ens33文件

1)文件内容要根据vmware的配置更改,具体如下:

选择虚拟网络编辑器

选择VMnet8的NAT设置

可以看到ip地址是192.168.226.0这个网段的,所以下面配置静态ip也要在这个网段才能上网

2)接下来分别编辑master,node1,node2的/etc/sysconfig/network-scripts/ifcfg-ens33文件

可以看到默认配置是dhcp,这样的话每次重启虚拟机ip地址会更改,如果IP更改下面在配置ip地址映射的话会很不方便,所以要配置静态ip

master主机配置

[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens3                                                                 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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=5d60f1f8-5796-49c3-bd6d-6fcb36badf81
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.226.140
GATEWAY=192.168.226.2
NETMASK=255.255.255.0
PEERD=no

node1主机配置

[root@node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33                                                                 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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=87c335e1-d0fc-4805-8b23-7ccd66ca2821
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.226.141
GATEWAY=192.168.226.2
NETMASK=255.255.255.0
PEERD=no

node2主机配置

[root@node2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33                                                                 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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=70acb8ac-608a-443b-a59d-5b936bf6160f
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.226.142
GATEWAY=192.168.226.2
NETMASK=255.255.255.0
PEERD=no

然后重启机器让ip配置生效,可以通过ip addr查看是否生效

之后通过ping www.baidu.com检查网络是否正常,此时三台机器网络都不可用

3)修改三台主机的/etc/resolv.conf文件,配置DNS服务器

# Generated by NetworkManager
# 三台主机在resolv.conf文件都增加下面这一行
nameserver 114.114.114.114

此时三台主机的网络都正常可用了

4.修改主机名配置hosts映射

修改主机名

# 四台服务器分别进入/etc/hostname文件中,分别修改主机名为master、node1、node2、node3

# 查看当前主机名

hostname

配置hosts映射

# 配置hosts文件,添加主机名和ip地址映射

vim /etc/hosts

# 修改完第一台机器的ip映射后,然后分发到各个不同的机器上 xxx代表目标服务器的主机名

scp /etc/hosts root@xxx:/etc/

 

5.替换systemctl(如果systemctl不能用)

下面使用systemctl的时候会出现如下情况,就需要进行替换,否则不用

#在k8s集群每台机器分别执行

#1.备份原来的systemctl文件

mv /usr/bin/systemctl /usr/bin/systemctl.old

#2.重新生成文件

#打开https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py这个网站,将页面的所有内容都复制,然后在使用VIM命令打开systemctl文件,并将刚才复制的东西粘贴进去并保存

vim /usr/bin/systemctl

chmod +x /usr/bin/systemctl

6.禁用firewalld服务

#在k8s集群每台机器分别执行
# 1 关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld

#查看防火墙是否开启
firewall-cmd --state

7.禁用selinux

#在k8s集群每台机器分别执行
# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
# 注意修改完毕之后需要重启linux服务
SELINUX=disabled

# 查看状态
sestatus

 

8.关闭swap

#k8s每台机器分别执行
# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap

9. 设置ipv4和v6的流量链接

cat << EOF >> /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 生效
sysctl --system

10.同步时间

yum -y install ntpdate
ntpdate time.Windows.com

基础配置完成重启机器

1.3安装基础软件

1.安装docker(所有节点)

# 1、切换镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2、查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates

# 3、安装特定版本的docker-ce
# 必须制定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 4、添加一个配置文件
#Docker 在默认情况下使用Vgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF> /etc/docker/daemon.json
{
	"exec-opts": ["native.cgroupdriver=systemd"],
}
EOF

# 5、启动dokcer
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker

# 6.测试
docker run hello-world

此时无法拉取镜像,会出现如下错误

[root@master ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pulling fs layer
docker: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/d2/d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a/data?verify=1723092638-fv94jBucnZv8F3RxbCAM5l5MA%2Fk%3D: dial tcp 108.160.163.106:443: connect: connection refused.
See 'docker run --help'.

 要更换镜像源,在/etc/docker/daemon.json中添加如下配置

{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}

然后systemctl restart docker重启后重新拉取测试

[root@master ~]# systemctl restart docker
Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details.
To force a start use "systemctl reset-failed docker.service" followed by "systemctl start docker.service" again.

出现这种情况可能是daemon.json里面有空格或者格式不对,然后修改为下面这样

{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": [ "https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}

 systemctl restart docker重启后重新拉取测试

此时docker安装完成

docker安装出现问题汇总

1) Failed to get D-Bus connection: Operation not permitted

更换systemctl

2)docker无法启动,一直启动失败

查看日志文件 /var/log/journal/docker.service.log会有如下报错

can't initialize iptables table `nat': Permission denied (you must be root)

此时可以修改/usr/lib/systemd/system/docker.service文件,对ExecStart=/usr/bin/dockerd 添加--iptables=false,也就是ExecStart=/usr/bin/dockerd --iptables=false

3)文件系统需要由overlay2更换为vfs

编辑/etc/docker/daemon.json。如果它还不存在,请创建后再编辑它。添加以下内容

{
  "storage-driver": "vfs"
}

4)controller: error obtaining controller instance: Enabling IP forwarding failed: open /proc/sys/net/ ipv4/ip_forward: read-only file

修改/proc/sys/net/ipv4/ip_forward内容为1,echo "1" > /proc/sys/net/ipv4/ip_forward

2.安装Kubernetes组件(所有节点)

# 更换镜像源
# 编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
cat > /etc/yum.repos.d/kubernetes.repo << EOF 
[kubernetes]
name=Kubernetes Repo
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64   
gpgcheck=0
enabled=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpgp
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF


# 查询kubeadm可用的版本
yum list kubeadm --showduplicates

# 安装kubeadm、kubelet、kubect
yum  install -y kubeadm-1.18.0 kubelet-1.18.0 kubectl-1.18.0


# 设置kubelet开机自启
systemctl enable kubelet

1.4.集群初始化

下面操作只需要在master节点执行

# 创建集群
# apiserver-advertise-address的ip地址是你master节点的ip地址
[root@master ~]#  kubeadm init --apiserver-advertise-address=192.168.226.140 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

根据下面的提示分别在master和node上执行不同的操作 

在master节点执行

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

在node节点执行

kubeadm join 192.168.226.128:6443 --token q64ha5.cuo0wdzca8sztzg9 \
    --discovery-token-ca-cert-hash sha256:d6b29a698a28cf1939ede7e4f7605635e05361a05bbea928e947147b512423a5

在master节点上查看节点信息

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   NotReady   master   18m     v1.17.4
node1    NotReady   <none>   4m2s    v1.17.4
node2    NotReady   <none>   3m57s   v1.17.4

1.5.安装网络插件,只在master节点操作即可

从初始化信息提示可以去官网查看配置cni网络Installing Addons | Kubernetes

进入官网可以看到有很多的解决方案,这里选择安装flannel

[root@master ~]# mkdir /opt/k8s -p
[root@master ~]# cd /opt/k8s/
[root@master k8s]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

 修改kube-flannel.yml文件

# 删除镜像docker.io的前缀
sed -i 's#docker.io/##g' calico.yaml

然后手动拉取镜像文件

[root@master k8s]# grep image: kube-flannel.yml
        image: flannel/flannel-cni-plugin:v1.5.1-flannel1
        image: flannel/flannel:v0.25.5
        image: flannel/flannel:v0.25.5
[root@master k8s]# docker pull flannel/flannel-cni-plugin:v1.5.1-flannel1
v1.5.1-flannel1: Pulling from flannel/flannel-cni-plugin
3fb2a2b49db6: Pull complete
bd4df3c464ff: Pull complete
Digest: sha256:442c2f8e1f9d27145b4090d0e8819b72676d46ac95cc81e944a7b69f49db5151
Status: Downloaded newer image for flannel/flannel-cni-plugin:v1.5.1-flannel1
[root@master k8s]# docker pull flannel/flannel:v0.25.5
v0.25.5: Pulling from flannel/flannel
3fb2a2b49db6: Already exists
6b518edcd22b: Pull complete
b1e57e1b0d6e: Pull complete
b678a87bf163: Pull complete
de2b3914d857: Pull complete
d804e8345c6b: Pull complete
535c74dae788: Pull complete
37965b9184b4: Pull complete
4f4fb700ef54: Pull complete
b7757664f176: Pull complete
Digest: sha256:4f65cc179d15e8ee4d67a6a32ce89c02094120a46452a4e0341d26be9fd556c3
Status: Downloaded newer image for flannel/flannel:v0.25.5

最后配置网络

[root@master k8s]# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[root@master k8s]#

等一会然后通过下面查看pod和节点状态 

[root@master k8s]# kubectl get po -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-6cwq8         1/1     Running   0          13m
coredns-7ff77c879f-fvhqn         1/1     Running   0          13m
etcd-master                      1/1     Running   0          14m
kube-apiserver-master            1/1     Running   0          14m
kube-controller-manager-master   1/1     Running   0          14m
kube-proxy-8dxzv                 1/1     Running   0          13m
kube-proxy-8sbbh                 1/1     Running   0          13m
kube-proxy-tcvzp                 1/1     Running   0          13m
kube-scheduler-master            1/1     Running   0          14m
[root@master k8s]# kubectl get no
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   15m   v1.18.0
node1    Ready    <none>   14m   v1.18.0
node2    Ready    <none>   14m   v1.18.0

可以看到pod都是running状态并且节点都是ready状态,此时k8s集群配置完成。

本文参考:

Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册_kubernetes部署验证-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值