1.创建Vagrant主机

在Vagrantfile文件中,添加以下内容:

Vagrant.configure("2") do |config|

  config.vm.define "k8s-01" do |master|
    master.vm.box =  "centos7"
    master.vm.provider "virtualbox" do |vb|
      vb.memory = "2048"
      vb.cpus = 2
    end
    master.vm.network "public_network", ip: "192.168.8.110"
    master.ssh.insert_key = false
    master.vm.hostname = "master"
  end

  config.vm.define "k8s-02" do |node1|
    node1.vm.box =  "centos7"
    node1.vm.network "public_network", ip: "192.168.8.111"
    node1.ssh.insert_key = false
    node1.vm.hostname = "node1"
  end

  config.vm.define "k8s-03" do |node2|
    node2.vm.box =  "centos7"
    node2.vm.network "public_network", ip: "192.168.8.112"
    node2.ssh.insert_key = false
    node2.vm.hostname = "node2"
  end

end

2.修改主机名

在/etc的hosts文件中,添加:

192.168.8.110   master
192.168.8.111   node1
192.168.8.112   node2

3.开启ssh连接

由于vagrant默认无密码密钥验证连接,为了便于管理,建议开启ssh开启密码连接,修改/etc/ssh/sshd_config文件,开启密码验证(记得使用passwd修改密码)
将PasswordAuthentication改为yes,
ChallengeResponseAuthentication也改为yes
在这里插入图片描述
在这里插入图片描述
重启sshd服务,在/bin目录下输入systemctl restart sshd.service
在这里插入图片描述
重新打开putty就可以登陆成功

4.关闭防火墙

iptables -F
systemctl stop firewalld
systemctl disable firewalld

在/etc/selinux/下的config文件中:

# 关闭selinux(关闭后重启生效)
vim /etc/selinux/config
# 修改SELINUX=enforcing选项为disabled
SELINUX=disabled
#开启临时关闭selinux
setenforce 0

在命令行中输入modprobe br_netfilter ,使修改生效

# 禁止iptables对bridge数据进行处理(kubeadm初始化时会检测该选项)
## 开启内核模块
modprobe br_netfilter

在/etc/sysctl.d/下,新建文件k8s.conf

## 写入配置参数
vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

保存并退出

## 立即生效
sysctl -p  /etc/sysctl.d/k8s.conf

5.关闭swapoff

# 临时关闭
swapoff -a 

6.安装k8s组件

如果系统中的yum命令不能用,先安装,详见https://blog.csdn.net/lisongyue123/article/details/108325374

# 移除旧版本docker
sudo yum remove docker docker-common docker-selinux docker-engine
# 安装一些依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 wget
# 下载发行版repo文件
sudo wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

添加kube组件仓库源:

# 添加kube组件仓库源
vi /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
# 刷新索引缓存
sudo yum makecache fast
# 安装软件
yum install -y docker-ce-18.09.9 kubelet kubeadm kubectl
# 启动并自启动
systemctl start docker
systemctl enable docker

systemctl start kubelet
systemctl enable kubelet

注意:上述步骤master和node节点均需操作

7.集群安装配置

7.1主节点配置(master)

(1)初始化kubeadm
在master节点配置,初始化kubeadm:

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

注意:如果初始化失败,使用kubeadm reset 进行重置。
成功后会生成一串信息,类似kubeadm join --token {token} {master-ip}:6443 --discovery-token-ca-cert-hash sha256:{hash-code} 建议保存。
若无法找到该信息,请看下面的操作:
–apiserver-advertise-address 指定api地址,一般为master节点
–image-repository 指定镜像仓库
–kubernetes-version 指定k8s版本(截至当前为1.16.0)
–pod-network-cidr 指定flannel网络(默认不要改)

(2)配置kubeconfig

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

(3)安装网络插件flannel
注意: 安装该插件会请求quay.io的镜像,请确保可以正常访问

# 先下载配置好后部署[建议使用此]
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 部署
kubectl apply -f kube-flannel.yml

注,如果失败,参考以下:

# 直接部署(可能由于网络原因导致镜像拉取 失败)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
## 若你发现部署后coredns的pod无法Running,主谋可能就是flannel节点拉取失败,请使用如下方式
## 镜像地址: quay.io/coreos/flannel 截至[19.11.17]最新版本为0.11.0.*
## 先删除上次部署(删除前最好看看pod事件,查看无法启动原因)
kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
## 拉取镜像(参考底部参考链接,从其他可用仓库拉取镜像)
## 模板: docker pull quay.azk8s.cn/xxx/yyy:zzz
## 其他针对quay.io的可用仓库: quay.mirrors.ustc.edu.cn quay-mirror.qiniu.com 
## 示例操作如下:
docker pull quay.azk8s.cn/coreos/flannel:v0.11.0-amd64
## 根据上一步将缺失的镜像拉取后,修改tag 其实就是将仓库名称改回来
docker tag quay.azk8s.cn/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
# 将缺失的镜像全部拉取下来后 再次部署
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

7.2从节点配置(node)
在主节点中查看token并配置:
(1)关于token(参考https://www.cnblogs.com/ITPower/p/12866713.html):
查看token状态:

kubeadm token list

在这里插入图片描述
重新生产token:

kubeadm token create

在这里插入图片描述
vrpnaf.3fzxslguao3d7y3i为新产生的token
获取–discovery-token-ca-cert-hash值:
在这里插入图片描述
框中的为获取的hash-code
(2)添加从节点

kubeadm join --token {token} {master-ip}:6443 --discovery-token-ca-cert-hash sha256:{hash-code}

说明
token:
可在主节点中通过kubeadm token list查看可用token列表,例如上图中的elpzcv.poneqolvd6loiozi
使用 kubeadm token create 创建一个新的(token过期时使用)
master-ip:
填写主节点的ip地址
hash-code:
使用以下命令生成:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed ‘s/^.* //’
在这里插入图片描述
上图错误,按照下图:
在这里插入图片描述

8.测试

(1)创建Deployment

# 创建nginx配置文件
vim nginx-deployment.yaml
# 文件内容
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
   tolerations:
   - key: "node-role.kubernetes.io/master"
     operator: "Equal"
     value: ""
     effect: "NoSchedule"

(2)部署

# 部署
kubectl apply -f nginx-deployment.yaml

(3)查看deployment信息

# 查看所有节点信息
[root@master ~]# kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-59c9f8dff-4n258   1/1     Running   0          20m
nginx-deployment-59c9f8dff-528g8   1/1     Running   0          20m

# 查看更详细的节点信息
[root@master ~]# kubectl get pods -o wide
NAME                               READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATES
nginx-deployment-59c9f8dff-4n258   1/1     Running   0          21m   10.244.2.2   node2   <none>           <none>
nginx-deployment-59c9f8dff-528g8   1/1     Running   0          21m   10.244.1.2   node1   <none>           <none>

在这里插入图片描述
在这里插入图片描述
改为:
在这里插入图片描述
查看集群信息:
在这里插入图片描述
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐