Kubernetes(k8s)集群部署指南(k8s版本:v1.16.2,Docker版本:18.06.3-ce)
k
通常情况下,k8s都是以集群的方式运行的,所以一般都至少会有一个master节点和一个worker节点,master节点负责整个集群的管理工作,而worker节点则负责具体的任务。当然,k8s也是可以只有一个master节点既负责集群管理也负责任务执行的,在这里主要还是讨论如何部署简单集群。
安装前准备,VMware下创建两台虚拟机,系统为:CentOS 7.5,用途如下:
hostname | IP | 用途 |
k8s-master | 192.168.0.107 | 用做master |
k8s-node | 192.168.0.227 | 用做worker |
安装步骤:
基础步骤:
针对两台机器都需要进行操作的步骤如下:
1、配置hostname
hostnamectl set-hostname k8s-master (机器:192.168.0.107)
hostnamectl set-hostname k8s-node (机器:192.168.0.227)
使用命令:hostname,查看当前主机名是否修改成功
[root@localhost ~]# hostname
k8s-master
2、添加主机名与IP映射
[root@localhost ~]# vim /etc/hosts
添加如下内容:
192.168.0.107 k8s-master
192.168.0.227 k8s-node
3、关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
4、关闭selinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
5、关闭swap
[root@localhost ~]# swapoff -a
[root@localhost ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab
6、升级Linux内核到最新的长期支持的内核版本
#内核库
yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
#升级内核为lt版本
yum --disablerepo='*' --enablerepo=elrepo-kernel install kernel-lt
也可以安装指定版本,查看ELRepo支持的版本命令如下:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#设置默认启动新内核
grub2-set-default 0
#重启
reboot
#查看内核版本
uname -mrs
内核版本成功升级到版本:Linux 4.4.218-1.el7.elrepo.x86_64 x86_64
7、同步集群时间
同步时间的常见方式有:ntp和chrony,CentOS7推荐使用的是chrony,已经默认安装,可以使用如下命令查看是否安装:
rpm -qa |grep chrony
systemctl status chronyd命令查看服务状态,默认是开机启动,并且开机同步时间
如果有发现时间未同步的,可以自行百度如何同步时间
8、配置系统参数
vim /etc/sysctl.d/k8s.conf
添加如下内容:
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_local_port_range = 10000 65000
fs.file-max = 2000000
net.ipv4.ip_forward = 1
vm.swappiness = 0
执行命令:sysctl --system,使配置生效,否则需要重启才生效
9、安装Docker
不同版本的k8s需要对应的docker版本,如果想安装不同版本的k8s可以自行百度一下对应的Docker版本
#卸载旧版本docker
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
#安装docker所需的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#配置镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#列出docker的版本
yum list docker-ce --showduplicates |sort -r
#安装指定版本的docker
yum install docker-ce-18.06.3.ce-3.el7
#启动docker
systemctl start docker
#设置开机启动
systemctl enable docker
10、配置docker
vim /etc/docker/daemon.json
添加如下内容:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
重启docker:
systemctl daemon-reload
systemctl restart docker
11、设置iptables为legacy模式
update-alternatives --set iptables /usr/sbin/iptables-legacy
12、配置k8s镜像源:
vim /etc/yum.repos.d/kubernetes.repo
添加内容:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
注:gpgcheck和repo_gpgcheck设置为0,否则容易校验不通过
13、安装k8s
#安装k8s基础组件
yum install kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kubernetes
#设置kubelet开机启动,并启动
systemctl enable --now kubelet
#修改kubelet的默认驱动
echo "KUBELET_EXTRA_ARGS=--cgroup-driver=systemd" > /etc/sysconfig/kubelet
k8s-master特有步骤:
1、用kubeadm初始化master节点
kubeadm init \
--apiserver-advertise-address=192.168.0.107 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.16.2 \
--pod-network-cidr=10.244.0.0/16
#--apiserver-advertise-address设置为自己的k8s-master主机的ip
#我这边安装过程中出现报错:
#failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: #connection refused.
#执行删除命令:
#rm -rf /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
#rm -rf /etc/kubernetes/*
#重新执行kubeadm的初始化命令,成功输出如下:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.107:6443 --token 9lsqnu.p7gl8tmi82omgkyv \
--discovery-token-ca-cert-hash sha256:b61844c438a01864b74bd2bb401075dc31e2d9e5b6eb09c416999e6708670f91
#kubeadm join这句命令需要保存好,之后在从节点加入主节点集群时需要
2、配置kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
3、配置flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
k8s-node节点执行步骤:
kubeadm join 192.168.0.107:6443 --token 9lsqnu.p7gl8tmi82omgkyv \
--discovery-token-ca-cert-hash sha256:b61844c438a01864b74bd2bb401075dc31e2d9e5b6eb09c416999e6708670f91
#kubeadm join这段命令是由master执行kubeadm init成功之后生成的
#如果报错:/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
#请执行:echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
在k8s-master节点执行:kubectl get nodes
可以看到如下信息:
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 31m v1.16.2
k8s-node Ready <none> 85s v1.16.2
在k8s-master执行如下命令,完成集群部署:
kubectl label node k8s-node node-role.kubernetes.io/worker=worker
重新执行命令:kubectl get nodes
可以看到如下信息:
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 33m v1.16.2
k8s-node Ready worker 3m47s v1.16.2
k8s dashboard的安装可以参考下面的文章:
更多推荐
所有评论(0)