K8S集群 & KubSphere2.1 &NFS存储

文档说明

本文将使用kubeadm安装k8s1.16.9版本,并且在k8s集群中安装kubesphere2.1.1。
官方文档中明确说明了如果要完全安装kubesphere,集群机器配置至少是8c16g,而最小化安装机器配置最少为2g内存,首次安装建议选择最小化安装,跟随文档,也会介绍如何定制安装。

准备工作

本文所有操作是在windows10系统下进行的,还需如下工具:

K8S环境准备
创建并启动4个虚拟机

在任意目录中创建文件,命名为:Vagrantfile,使用文本编辑工具添加如下内容:

Vagrant.configure("2") do |config|
   (1..4).each do |i|
        config.vm.define "k8s-node#{i}" do |node|
            # 设置虚拟机的Box
            node.vm.box = "centos/7"

            # 设置虚拟机的主机名
            node.vm.hostname="k8s-node#{i}"

            # 设置虚拟机的IP
            node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"

            # 设置主机与虚拟机的共享目录
            # node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share"

            # VirtaulBox相关配置
            node.vm.provider "virtualbox" do |v|
                # 设置虚拟机的名称
                v.name = "k8s-node#{i}"
                # 设置虚拟机的内存大小
                v.memory = 4096
                # 设置虚拟机的CPU个数
                v.cpus = 4
            end
        end
   end
end

说明:

  • 默认每台虚机CPU:4核 内存:4GB
  • 创建4台虚拟机,名称分别为: k8s-node1、k8s-node2、k8s-node3、k8s-node4
  • 4台虚拟机的宿主IP分别为:192.168.56.100、192.168.56.101、192.168.56.102、192.168.56.103
#在Vagrantfile文件所在目录中执行如下命令:
vagrant up

注:如果安装很慢,可以先下载vagrant box来解决,方法如下:

  1. 进入vagrant官网 https://www.vagrantup.com/
  2. 点击findbox【寻找box】,进入有很多box的列表 https://app.vagrantup.com/boxes/search
  3. Download
  4. 下载的文件放在和Vagrantfile文件同一目录下
  5. 执行命令,加载镜像:vagrant box add centos/7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
  6. 重新执行:vagrant up
开启root密码访问权限

设置访问权限

#进入到vagrantfile文件所在目录
#k8s-node1为虚拟机的名称
vagrant ssh k8s-node1
#切换root账户
su root
#输入密码(密码是 vagrant)
#编辑文件
vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes
#重启服务 
service sshd restart
#退出 
exit
exit

其它两个节点也是按照上述方法设置访问权限

ssh客户端连接节点

Windows10推荐使用xshell ,MacOS推荐使用iterm2SSH客户端工具。
连接到三台虚机之后,命令ip addr 查看eth0 ip,发现每个节点的IP相同,是因为虚拟默认的网卡连接方式是(网络地址转换NAT),需要更改。

设置虚拟机的网络环境

  • 在VirtualBox中关闭三个节点的电源。
  • 在VirtualBox菜单,管理-全局设定-网络,创建一个NatNetwork。
  • 选中每台虚机,设置-网络-网卡1,连接方式:选择NAT网络,界面名称:NatNetwork,高级:Mac地址:刷新。
  • 同样其它节点也做同样的设置。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AgdrwzRx-1608683529281)(evernotecid://E724F631-6C1C-440D-962A-A702734E8171/appyinxiangcom/2609410/ENResource/p82)]
# 检测网络环境是否设置好
ip route show  #检查是否用的相同的网卡eth0
ip addr  #此时观察每个节点的IP是否是不同的
ping [ip] #每台虚拟机都互PING下
角色 IP地址 主机名 docker版本 系统
master 10.0.2.20 k8s-node1 18.09.9 CentOS7.x
node1 10.0.2.21 k8s-node2 18.09.9 CentOS7.x
node2 10.0.2.22 k8s-node3 18.09.9 CentOS7.x
node3 10.0.2.23 nfs-node 18.09.9 CentOS7.x

以上主机名前缀为k8s的虚机将配置k8s集群,nfs-node仅作为NFS服务节点。

为每个节点配置host信息

cat >> /etc/hosts <<EOF
10.0.2.20 k8s-node1
10.0.2.21 k8s-node2
10.0.2.22 k8s-node3
10.0.2.23 nfs-node
EOF
设置linux环境

如下K8S三个节点都要配置。

关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

关闭selinux


#临时修改 
setenforce 0 
#永久修改,重启服务器后生效 
sed -i '7s/enforcing/disabled/' /etc/selinux/config
#查看SELinux状态
sestatus

创建/etc/sysctl.d/k8s.conf文件,添加如下内容


#向文件中写入以下内容 
cat >/etc/sysctl.d/k8s.conf <<EOF 
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

安装ipvs

脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。


#向文件中写入以下内容 
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 

#output
nf_conntrack_ipv4  15053 0 
nf_defrag_ipv4      12729 1 nf_conntrack_ipv4 
ip_vs_sh              12688 0 
ip_vs_wrr             12697 0 
ip_vs_rr               12600 0 
ip_vs                  145497 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr 
nf_conntrack        133095 2 ip_vs,nf_conntrack_ipv4 
libcrc32c             12644 3 xfs,ip_vs,nf_conntrack

安装ipset和ipvsadm(便于查看 ipvs 的代理规则)

 yum -y install ipset ipvsadm

同步服务器时间


#安装chrony 
yum -y install chrony 
#修改同步服务器地址为阿里云 
sed -i.bak '3,6d' /etc/chrony.conf && sed -i '3cserver ntp1.aliyun.com iburst' \ 
/etc/chrony.conf 
#启动chronyd及加入开机自启 
systemctl start chronyd && systemctl enable chronyd 
#查看同步结果 
chronyc sources 
#output
210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample ===============================================================
^* 120.25.115.20 2 6 37 13 +194us[+6131us] +/- 33ms

关闭swap

#临时关闭
swapoff -a   
#永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab

通过free -m命令查看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhdYuoPl-1608683529286)(evernotecid://E724F631-6C1C-440D-962A-A702734E8171/appyinxiangcom/2609410/ENResource/p84)]

swappiness 参数调整,修改/etc/sysctl.d/k8s.conf添加下面一行

cat >>/etc/sysctl.d/k8s.conf <<EOF 
vm.swappiness=0 
EOF 

#使配置生效 
sysctl -p /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1 
vm.swappiness = 0
安装docker

卸载之前的docker

#如果是重新安装docker
sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

添加阿里云yum源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看可用版本

yum list docker-ce --showduplicates|sort -r

安装docker18.09.9

请不要安装最新版本的docker,可能会发生不可预料的结果

yum -y install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9

启动docker并设置开机自启

systemctl enable docker && systemctl start docker

配置阿里docker镜像加速

阿里镜像加速 自行申请或使用如下地址。

sudo mkdir -p /etc/docker 
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    
    "registry-mirrors": ["https://cbcadaae.mirror.aliyuncs.com"]
} 
EOF

配置完后重启docker

sudo systemctl restart docker

查看加速

docker info

查看docker版本

docker version
#output

Client: Version: 18.09.9 
API version: 1.39 
Go version: go1.11.13 
Git commit: 039a7df9ba 
Built: Wed Sep 4 16:51:21 2019 
OS/Arch: linux/amd64 
Experimental: false 

Server: Docker Engine - Community 
Engine: Version: 18.09.9 
API version: 1.39 (minimum version 1.12)
Go version: go1.11.13 
Git commit: 039a7df 
Built: Wed Sep 4 16:22:32 2019 
OS/Arch: linux/amd64 
Experimental: false
修改docker Cgroup Driver为systemd

#修改docker Cgroup Driver为systemd 
#将/usr/lib/systemd/system/docker.service文件中的这一行 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 
#修改为 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd 
#如果不修改,在添加 worker 节点时可能会碰到如下错误 [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/ 

#使用如下命令修改 
sed -i.bak "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service 

#重启docker 
systemctl daemon-reload && systemctl restart docker
安装kubeadm

科学上网


cat >/etc/yum.repos.d/kubernetes.repo<<EOF 
[kubernetes] 
name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 
enabled=1 
gpgcheck=1 
repo_gpgcheck=1 
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg 
EOF

使用阿里云yum源

cat >/etc/yum.repos.d/kubernetes.repo <<EOF 
[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 
EOF

安装 kubeadm、kubelet、kubectl(阿里云yum源会随官方更新最新版,因此指定版本)


#安装1.16.9版本 
yum -y install kubelet-1.16.9 kubeadm-1.16.9 kubectl-1.16.9 
#查看版本 
kubeadm version 
#output
kubeadm version: &version.Info{
   Major:"1", Minor:"16", GitVersion:"v1.16.9", GitCommit:"a17149e1a189050796ced469dbd78d380f2ed5ef", GitTreeState:"clean", BuildDate:"2020-04-16T11:42:30Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

设置kubelet开机自启

systemctl enable kubelet

设置k8s命令自动补全

yum -y install bash-completion 
source /usr/share/bash-completion/bash_completion 
source <(kubectl completion bash) 
echo "source <(kubectl completion bash)" >> ~/.bashrc

至此,基本环境安装完成
建议:在virtualBox中为每台虚机生成一个备份(系统快照)

初始化K8S集群
kubeadm初始化
kubeadm init \
#master节点IP
--apiserver-advertise-address=10.0.2.20 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.16.9 \
--service-cidr=10.96.0.0/16 \
#k8s容器组所在的网段
--pod-network-cidr=10.244.0.0/16

执行完成后,不要关掉窗口!!!

拷贝kubeconfig文件

#此处代码为上一步骤执行成功后返回的
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 10.0.2.20:6443 --token cd2n8p.1cjz9slln7sb8ypb \
    --discovery-token-ca-cert-hash sha256:07860c45c429751f26d737ed29d6d87f3cdfd4131cd7627675de63ad05637a22
 # 此处的token是初始化成功后返回的 (你的和我的不一样)   
# 注意上述命令需要在规定时间(20小时)内完成,否则token失效

生成新的token

如果长时间没有将节点加入集群,token会失效,可以用如下方法重新生成token。

#默认有效期24小时,若想久一些可以结合--ttl参数,设为0则用不过期
kubeadm token create --print-join-command 
#output
kubeadm join 10.0.2.20:6443 --token pdas2m.fkgn8q7mz5u96jm6 --discovery-token-ca-cert-hash sha256:6fd9b1bf2d593d2d4f550cd9f1f596865f117fef462db42860228311c2712b8b
#查看token
kubeadm token list

master节点查看node,发现状态都是NotReady,因为还没有安装网络插件。

安装flannel网络插件

kube-flannel.yml

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp.flannel.unprivileged
  annotations:
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
    seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
    apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
    apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/defa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值