本机虚拟机上搭建了三个节点,均在Ubuntu上面操作。主要是为了方便自己记录,以后使用的。
亲测可用2019/10/9

初始化搭建环境并初始化master节点,将其他节点加入集群*****
在master节点和其他节点上面均配置docker和k8s,只是master节点上需要初始化,并且加入网络插件。
刚开始都需要关闭防火墙,关闭swap,关闭selinux等准备工作

1:关闭防火墙
sudo ufw disable

2:关闭swap

 sudo swapoff -a     #这个只是暂时关闭,重启后失效
 sudo vim /etc/fstab   #通过修改配置文件,彻底关闭
# 注释掉swapfile这一行

3:关闭selinux

 sudo vim /etc/selinux/config   #通过修改配置文件
 SELINUX=disabled

4:修改主机名,修改为能识别的名字。通过命令行或者自己设置都可以。可选。

5:安装一些基本工具,比如:vim,curl等.

sudo apt update && \
sudo apt -y upgrade && \
sudo apt install -y vim \
curl \
apt-transport-https \
ca-certificates \
software-properties-common

6:更改dns服务 暂定,先暂时不设置这个

$ sudo apt install -y unbound
$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
$ sudo rm -rf /etc/resolv.conf
$ sudo vim /etc/NetworkManager/NetworkManager.conf
 # 在[main]下面添加
 dns=unbound
# 重启生效
$ reboot

7:配置数据包转发 先暂时不设置这个

sudo vim /etc/sysctl.conf    #修改配置文件,往文件中添加东西
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

使配置生效,但是重启后失效

sudo modprobe br_netfilter
 sudo sysctl -p

设置开机自动载入br_netfilter

 sudo vim /etc/init.d/load_br_netfilter.sh
  #!/bin/bash
  ### BEGIN INIT INFO
  # Provides:       svnd.sh
  # Required-Start: $local_fs $remote_fs $network $syslog
  # Required-Stop:  $local_fs $remote_fs $network $syslog
  # Default-Start:  2 3 4 5
  # Default-Stop:   0 1 6
  # Short-Description: starts the svnd.sh daemon
  # Description:       starts svnd.sh using start-stop-daemon
  ### END INIT INFO
  sudo modprobe br_netfilter

 sudo chmod 775 /etc/init.d/load_br_netfilter.sh
 sudo update-rc.d load_br_netfilter.sh defaults 90

如果要取消开机自动载入模块

$ sudo update-rc.d -f load_br_netfilter.sh remove

第一步:先装docker
1:先卸载可能存在的旧版本

 sudo apt-get remove docker docker-engine docker-ce docker.io

2:更新apt包索引:

sudo apt-get update

3:安装以下包以使apt可以通过HTTPS使用存储库(repository)

 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

4:添加Docker官方的GPG密钥:

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

5:使用下面的命令来设置stable存储库:

 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

6:再更新apt包索引:

 sudo apt-get update

7:列出可用的版本:

 apt-cache madison docker-ce

8:安装指定版本

sudo apt-get install docker-ce=18.06.3~ce~3-0~ubuntu

9:查看docker状态是否启动

systemctl status docker

若未启动,则启动

sudo systemctl start docker

停止docker

sudo systemctl stop docker 

设置docker开机自启动

systemctl enable docker.service

10:验证是否正常

sudo docker run hello-world

第二步:搭建k8s环境
1: 配置源

 sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
 sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF

更新索引

$ sudo apt update

查看可用的版本

apt-cache madison kubeadm

2:安装指定版本

sudo apt install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
sudo apt-mark hold kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00

3:设置开机自启动

sudo systemctl enable kubelet && sudo systemctl start kubelet

4:初始化master节点

这个可以用

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --pod-network-cidr=10.244.0.0/16

如果不行就试一下这个

kubeadm init --kubernetes-version=1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

5:重新生成token信息,一般是12个小时才过期 需要的时候才执行的。

kubeadm token create --print-join-command

6:安装CNI flannel网络插件:如果不安装网络插件,那么master节点的状态是NoReady
在安装网络插件之前,要进行设置,不然会报:The connection to the server localhost:8080 was refused

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

如果不进行这个操作,kubectl get nodes也会报错

这个可以用

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

如果不能用试试这个

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

到目前为止,k8s环境基本搭建好,master节点也初始化好了。接下来就是让其他节点加入到集群中来。

节点重启后,一定要记得关闭swap,执行重置命令,然后在join集群中去。

7:在其他节点上面执行那个master节点生成的token指令。

这里需要注意的是:除了master节点需要装docker和kubectl、kubeadm、kubelet外。其他节点也需要装,而且得装一样的。
例如:在其他节点执行这个

kubeadm join 192.168.172.134:6443 --token 1ly6ta.omqv3bkurfomxw0j     --discovery-token-ca-cert-hash sha256:d65642726224dfdf52ccd8af1e9fc1ca30ad201e4b03a14ebd327d7f60abf1c8

8:之前加入集群的节点,如果后面想要重新加入集群,必须执行
kubeadm reset 命令,不然会报错

注意:记住一些常出现的错误,以及解决方法。如果报错了,一定要学会看控制台所报的错误,一定要看!!!!!
1)新加入的节点的状态是NotReady,解决方法是:
重启各node节点的daemon、docker和kuberlet

 systemctl daemon-reload
 systemctl restart docker
 systemctl restart kubelet

最后执行

kubeadm reset

最后重新join集群
则解决!

2)k8s删除一个节点

kubectl delete node nodename

其实这个命令是通用的,可以删除任何类型的。

kubectl delete type typename

type 是资源类型,可以是node, pod, rs, rc, deployment, service等等,typename是这个资源的名称。

注意:以后不管是哪个节点,只要重启后,master就去看docker和kubelet状态是否正常,执行kubectl get nodes是否正常
显示节点信息。其他节点就去看docker是否正常,其次如果有问题,想要重新加入集群,必须得先重置:kubeadm reset

在Ubuntu中一些常用的通过终端修改配置文件的操作:
1:通过vim 命令进入某个配置文件,i是插入的意思。想要保存退出则esc,然后:wq则保存退出了。
2:设置中文,时间,不锁屏,均在设置里面。

在集群中部署一个简单的应用******
nigx的简单部署
1:在master 节点上创建一个deployment

kubectl create deployment nginx --image=nginx

查看

kubectl get deployments

2:创建一个service

kubectl create service nodeport nginx --tcp 80:80

查看

kubectl get svc

3:在slave节点上执行下面的命令验证一下nginx有没有部署成功。
curl localhost:30601
#这里的端口号要看实际你部署后的端口号

或者
curl kube-slave:30601
#这里的kube-slave是节点的主机名,也就是什么node1,node2…

打开浏览器,输入:localhost:端口号 或者 节点主机名:端口号 能正常访问nigx页面即可。

Logo

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

更多推荐