1、修改/etc/hosts
分别更改Hostname为 master、node1、node2
vim /etc/hostname
master
node1
node2
将下面的添加到每个服务器中
vim /etc/hosts
193.xxx.xx.167 master
193.xxx.xx.58 node1
193.xxx.xx.59 node2
roboot重启机器生效
2.关闭CentOS7自带的防火墙服务
关闭所有防火墙!!
# 临时关闭
service firewalld stop
# 设为开机,不启动
systemctl disable firewalld
# 查看防火墙的状态
systemctl status firewalld
# 查看iptables状态 要关闭
systemctl status iptables
3.关闭seLinux
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可生效
临时关闭selinux:
setenforce 0
查看SELinux状态:
getenforce
4.禁用交换分区(临时)
查看交换分区状态,如果swap数值全部为0,则表示已经禁用。
# free -h
# swapoff -a
5.设置代理(临时)
当你的服务器连不了外界的网时,才需要设置。不然不需要!
# export http_proxy=http://xx.xxx.129.21:8080
# export https_proxy=http://xx.xxx.129.21:8080
6.更新yum
系统初始化安装(所有主机)-选择【最小化安装】,然后yum update,升级到最新版本
# yum -y install epel-release
# yum update
7.安装docker
每台服务器都需要装!!!
卸载旧版本(如果安装过旧版本的话)
# yum remove docker docker-common docker-selinux docker-engine
安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
7.1.添加yum源
# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
注:docker的官方镜像由于在国外有些rpm下载不了,所以用阿里的镜像。
另外,安装之前执行yum clean all命令,以防缓存中版本冲突。
7.2.可以查看所有仓库中所有docker版本,并选择特定版本安装
# yum list docker-ce --showduplicates | sort -r
7.3.安装docker
# sudo yum install docker-ce docker-ce-cli containerd.io #默认安装最新版
或者要选择安装某个版本:
# sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
7.4.启动并加入开机启动
# sudo systemctl start docker
# sudo systemctl enable docker
7.5.验证安装是否成功
docker version
表明安装成功!
由于默认镜像仓库在国外下载很慢,经常会断
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
#sudo mkdir -p /etc/docker
#sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qqnn8qm9.mirror.aliyuncs.com"]
}
EOF
重启docker使其生效
#sudo systemctl daemon-reload
#sudo systemctl restart docker
7.6.设置上网代理
如果服务器需要代理才能联网,docker也要配置相应的代理。没有的话,请忽略
# mkdir -p /etc/systemd/system/docker.service.d
#vim /etc/systemd/system/docker.service.d/http-proxy.conf
写入以下内容:
[Service]
Environment="HTTP_PROXY=http://xxx.xxx.129.xx:8080" "NO_PROXY=localhost,127.0.0.1"
$ vim /etc/systemd/system/docker.service.d/https-proxy.conf
写入以下内容:
[Service]
Environment="HTTPS_PROXY=http://xx.xxx.xxx.xx:8080" "NO_PROXY=localhost,127.0.0.1"
重启使生效:
# systemctl daemon-reload
# systemctl restart docker
# systemctl show --property=Environment docker
7.7.测试docker是否能够正常使用
docker run hello-world
表明成功
8.时间校对(三台机器都做时间校对)
每台依次执行下列所有命令
yum install ntp
systemctl start ntpd
systemctl enable ntpd
ntpdate ntp1.aliyun.com
hwclock -w
9.安装k8s组件
每台服务器都需要进行以下操作!
9.1.配置国内的repo源:
#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
9.2.修改网络配置:
修改内核两个参数(这两个是参数是防止应用部署在centos系统情况下由于iptables被绕过而导致的路由错误)
简单的说就是使流过网桥的流量也进入iptables/netfilter框架中:
# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
修改完成后执行sysctl --system使其生效。
sysctl --system
确认并保证输出的都是1
# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
9.3.安装k8s包:
# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
9.4.完成后启动kubelet服务:
# systemctl enable kubelet.service
# systemctl start kubelet.service
查看状态
# systemctl status kubelet.service
K8s未初始化,kubelet是启动不起来
10. 初始化master节点
10.1.查看kubectl的版本信息:
$ kubectl version
10.2.初始化集群:
对master服务器进行操作:
法1:
kubeadm init --kubernetes-version=1.19.2 --apiserver-advertise-address=192.168.118.128 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
1.19.2是你kubectl的版本
修改对应kubectl版本和本机IP地址
-image-repository 指定镜像仓库地址,默认的仓库在国外,可能导致镜像下载出问题
上述命令初始化master后,会打印出下列token
记录好这段,以后会经常用到: 用来在node节点服务器执行(执行成功后即可加入集群,再master节点可查看)
kubeadm join 192.168.118.128:6443 --token 0ho5p9.o97ocfp4oy3yboos \
--discovery-token-ca-cert-hash sha256:9b513f2871c90031380c13aeff6b6dd92a3ec84e467a63322e947405cb440c4f
法2:
如果网络ok,使用法1的方法安装不会存在问题。但是国内可能一些镜像无法下载,可以使用阿里云的docker hub镜像进行安装。
首先输出kubeadm默认配置:
#kubeadm config print init-defaults > kubeadm-init.yaml
将其中:
这一步我试了一半,应该能行,但是下图中的registry.cnhangzhou.aliyuncs.com/google_containers不可用,我将cnhangzhou删除就可以pull了,还是镜像容器的问题,我只做到了这里
mageRepository修改成 registry.cnhangzhou.aliyuncs.com/google_containers
serviceSubnet部分设置成10.244.0.0/16,也就是--pod-network-cidr=10.244.0.0/16参数。
advertiseAddress: 1.2.3.4
改成193.xxx.xx.167(及本机地址)
然后先进行镜像下载:
#kubeadm config images pull --config kubeadm-init.yaml
最后再使用修改后的配置进行初始化:
#kubeadm init --config kubeadm-init.yaml
即可
下面是一些常用的命令:
重新初始化 # kubeadm reset
检测组件运行是否正常 # kubectl get cs
查看所有节点(集群状态检测)
(注:在master节点上进行如下操作):
[hall@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 41m v1.13.0
复制代码这里master的状态为NotReady是因为还没有进行pod network安装。下面接着讲。
10.3.初始化成功后打印,按提示操作:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
11.安装 flannel网络
下载yml文件:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
11.1.然后创建flannel:
我当时是执行的这步
kubectl apply -f kube-flannel.yml
没有执行创建这步
# kubectl create -f kube-flannel.yml
完成后可以检查:
# kubectl get nodes
这个时候应该还么有node节点,类似上图
NAME STATUS ROLES AGE VERSION
master Ready master 102d v1.13.0
这时候节点的状态应该是Ready。说明master节点状态正常。
同时也可以查看flannel的pod:
$ kubectl get pods -n kube-system | grep flannel
或者还可以这样获取更详细pod的运行情况:
#kubectl get pod -o wide -n kube-system
12.添加工作节点
确保1-9步骤全部完成。
由于之前服务器node1已经配置过代理,需要将master节点的代理取消
#export no_proxy=“localhost,127.0.0.1,localaddress,.localdomain.com ,193.xxx.xx.167”
如果没有配代理,请忽略上面
然后执行master节点kubeadm init完成后得到的join命令:
kubeadm join 192.168.118.128:6443 --token 0ho5p9.o97ocfp4oy3yboos
–discovery-token-ca-cert-hash sha256:9b513f2871c90031380c13aeff6b6dd92a3ec84e467a63322e947405cb440c4f
去master节点执行kubectl get nodes:
发现已经该节点已经注册上来了,时间比较长大概需要10分钟左右,其status才变成Ready
参考地址:
https://blog.csdn.net/qq_41603102/article/details/91490623
第二条着重参考,比较重要!!
http://www.51niux.com/?id=252
kubernetes部署dashboard可视化插件
https://blog.csdn.net/networken/article/details/85607593
kubectl get secret -n kube-system|grep admin
其中 dashboard-admin-token-ltxlw根据上述查询后更改
kubectl describe secret dashboard-admin-token-ltxlw -n kube-system
k8s全部关机断电后如何启动
所有节点执行:
启动:
systemctl start kubelet.service
systemctl restart kubelet.service
systemctl status kubelet.service
发现没用。于是关闭交换空间
swapoff -a
原因:集群断电重启后自动打开了交换空间,而kubernetes需要关闭交换空间 swapoff -a
kubelet --version
kubectl version
kubectl get nodes
kubectl get pods -n kube-system | grep flannel
kubectl get pod -o wide -n kube-system
kubectl get ns