kubernets介绍
Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。也是迄今为止最流行的容器编排部署工具。
虚拟机准备
因为本次部署为单master双node节点,所以准备了3台虚拟机,系统版本为CentOS Linux release 7.6.1810,配置都为2核心4G内存。
环境准备
配置固定ip、主机名 (三台主机分别配置)
先配置主机名
[root@localhost ~]# hostnamectl set-hostname k8s-master
[root@localhost ~]# hostnamectl set-hostname k8s-node1
[root@localhost ~]# hostnamectl set-hostname k8s-node2
配置固定ip
[root@k8s-master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
IPADDR=192.168.178.200
NETMASK=255.255.255.0
GATEWAY=192.168.178.2
DNS1=192.168.178.2
DNS2=222.222.222.222
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens33"
UUID="d308a0b7-dab8-4e15-bf26-12c43fcec28f"
DEVICE="ens33"
ONBOOT="yes"
重启网卡
[root@k8s-master ~]#systemctl restart network
最后三台服务器主机名对应ip为:
主机名 | IP |
---|---|
k8s-master | 192.168.178.200 |
k8s-node1 | 192.168.178.201 |
k8s-node2 | 192.168.178.202 |
hosts文件配置
[root@k8s-master ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.178.200 k8s-master
192.168.178.201 k8s-node1
192.168.178.202 k8s-node2
[root@k8s-master ~]# scp /etc/hosts k8s-node1:/etc/hosts
[root@k8s-master ~]# scp /etc/hosts k8s-node2:/etc/hosts
yum源配置
因为服务器内置为国外源下载安装包较慢,全部替换为国内源
首先安装wget工具,三台服务器都要安装
[root@k8s-master ~]# yum install -y wget
新建备份文件夹
[root@k8s-master ~]# mkdir /etc/yum.repos.d/repo.bak
把原有仓库放到备份文件夹
[root@k8s-master ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo.bak/
配置国内源
[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@k8s-master ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@k8s-master ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
配置kubernetes国内源
cat <<EOF > /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
EOF
最后执行
yum clean all && yum makecache
其他配置
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
关闭swap分区
sed -i 's%^/dev/mapper/centos-swap %#/dev/mapper/centos-swap%' /etc/fstab
内核配置
modprobe br_netfilter &&
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
docker配置
mkdir /etc/docker &&
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
安装docker和kubeadm
yum install -y kubeadm docker-ce
安装完成后重启服务器,注意三台都要这么配置哦!
重启完成后,启动docker和kubelet
systemctl start docker && systemctl enable docker && systemctl start kubelet && systemctl enable kubelet
查看需要的容器镜像
[root@k8s-master ~]# kubeadm config images list
W0731 14:26:02.629709 18908 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
k8s.gcr.io/kube-apiserver:v1.18.6
k8s.gcr.io/kube-controller-manager:v1.18.6
k8s.gcr.io/kube-scheduler:v1.18.6
k8s.gcr.io/kube-proxy:v1.18.6
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
使用docker拉取镜像(需要梯子)
[root@k8s-master ~]# kubeadm config images list > imageList
[root@k8s-master ~]# vi imagePull.sh
#!/bin/bash
list=`cat imageList`
for i in $list
do
docker pull $i
done
[root@k8s-master ~]# sh imagePull.sh
对于无法翻墙的朋友们,可以去我的百度网盘下载:
链接: https://pan.baidu.com/s/1vnuKYp8hdhiY5Yph-ykTcQ 密码: o53b
下载完镜像之后只需要解压然后执行里面的load脚本就行。
镜像下载完毕后,就可以进行集群初始化了
[root@k8s-master ~]# kubeadm init
......
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.178.200:6443 --token cmmrn0.ococ5vqnk61t0fid \
--discovery-token-ca-cert-hash sha256:ad1ab6666e18eda6a1aecae5121fa4905111c0e7599710779f1cb5d0cea2359d
按照提示执行一下操作
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-node1 ~]# kubeadm join 192.168.178.200:6443 --token cmmrn0.ococ5vqnk61t0fid \
> --discovery-token-ca-cert-hash sha256:ad1ab6666e18eda6a1aecae5121fa4905111c0e7599710779f1cb5d0cea2359d
[root@k8s-node2 ~]# kubeadm join 192.168.178.200:6443 --token cmmrn0.ococ5vqnk61t0fid \
> --discovery-token-ca-cert-hash sha256:ad1ab6666e18eda6a1aecae5121fa4905111c0e7599710779f1cb5d0cea2359d
执行完上述命令后(没有报错)查看下集群状态
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master NotReady master 12m v1.18.6
k8s-node1 NotReady <none> 3m8s v1.18.6
k8s-node2 NotReady <none> 2m17s v1.18.6
发现集群节点不可用那是因为我们还没有安装网络插件,下面我们来安装网络插件
calico镜像网盘地址为:
链接: https://pan.baidu.com/s/11WM-FWuv7SyhlLH5oZJYdA 密码: j2jf
# curl https://docs.projectcalico.org/manifests/calico.yaml -O
# kubectl apply -f calico.yaml
安装好插件后再来查看状态
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 151m v1.18.6
k8s-node1 Ready <none> 142m v1.18.6
k8s-node2 Ready <none> 141m v1.18.6
至此集群安装好了
参考文档:1、https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
2、https://kubernetes.io/docs/setup/production-environment/container-runtimes
3、https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises