**部署规划**
准备三台服务器(小编使用的是CentOS 7)
192.168.220.24 master
192.168.220.25 node1
192.168.220.26 node2
备注:第1~8步和第10步为公共步骤,各主机均需执行
1、设置主机名,并重启 && 时间同步配置 && 配置ssh节点互信
#每台主机设置主机名
vi /etc/hosts
192.168.220.24 master
192.168.220.25 node1
192.168.220.26 node2
reboot
#时间同步配置
yum -y install chrony
systemctl enable chronyd.service && systemctl start chronyd.service && systemctl status chronyd.service
chronyc sources
#配置节点间ssh互信;那么节点之间就能无密访问,方便日后执行自动化部署
ssh-keygen # 每台机器执行这个命令, 一路回车即可
ssh-copy-id node # 在master上拷贝公钥到其他节点,这里需要输入yes和密码
2、关闭linux防火墙
#关闭防火墙
systemctl stop firewalld
#设置防火墙开机不启动
systemctl disable firewalld
#查看防火墙状态
systemctl status firewalld
3、关闭selinux防火墙
#永久关闭selinux,将SELINUX=enforcing修改为disabled
vi /etc/selinux/config
SELINUX=disabled
#重启系统
reboot
#查看selinux的状态
/usr/sbin/sestatus
SELinux status: disabled
4、关闭swap自动挂载
#修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载,即注释/dev/mapper/centos-swap这行
vi /etc/fstab
#修改/etc/sysconfig/kubelet:
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
# 1)下载并安装
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
# 2)设置开机启动
systemctl enable docker
systemctl start docker
# 3)查看Docker版本
docker --version
Docker version 18.06.1-ce, build e68fc7a
# 4)添加阿里云仓库加速(阿里云-》容器镜像服务-》镜像加速 该路径下获取)
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://76rdsfoe.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
#登录docker(阿里云-》容器镜像服务-》访问凭证,该路径下设定固定密码,用作登录docker)
sudo docker login --username=jeffii registry.cn-hangzhou.aliyuncs.com
#紧接着,输入密码你刚设置的密码即可。若一下拉取镜像时提示connect refused的话,可重新登录下docker
6、添加阿里云kubernetes的yum软件源
#第一步:创建kubernetes.repo
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
#依次执行一下语句
wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
rpm --import yum-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import rpm-package-key.gpg
#更新下缓存
yum clean all
yum makecache
#查看已安装的yum源
yum repolist
#下载常用工具包
yum install vim bash-completion net-tools gcc -y
注意:通过代理方式加载国内源(坑之一)
#学习马哥视频中是需要做以下配置,但我操作过程中,发现通过这种配置拉取不了kubeadm镜像
#vi /usr/lib/systemd/system/docker.service
#Environment="HTTPS_PROXY=http://www.ik8s.io:10080"
#Environment="NO_PROXY=127.0.0.0/8,172.20.0.0/16"
#systemctl daemon-reload
#systemctl restart docker
#docker info
#查看以下配置文件值是否为1
more /proc/sys/net/bridge/bridge-nf-call-iptables
more /proc/sys/net/bridge/bridge-nf-call-ip6tables
#若以上语句打印结果为0则执行一下语句
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1" >/proc/sys/net/bridge/bridge-nf-call-ip6tables
8、各节点进行安装kubelet、kubeadm、kubectl
#安装以下三个组件
yum install kubelet kubeadm kubectl
#设置kubelet开机自启动
systemctl enable kubelet
9、部署Kubernetes Mstaer节点上
9.1使用kubeadm init初始化集群
#apiserver-advertise-address此ip为你设置的主节点的ip地址
kubeadm init --kubernetes-version=1.18.0 \
--apiserver-advertise-address=192.168.220.24 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
出现上图说明初始化成功!!!
9.2验证测试
配置kubectl命令
mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
获取pods列表命令
kubectl get pods --all-namespaces
#执行结果显示kube-system coredns为pending状态,可先不管
查看各组件健康状态命令
kubectl get cs
以上,可知scheduler&&controller-manager组件状态不健康。若健康则不用执行下面的步骤
#step1:编辑以下两个配置文件,删除掉--port=0这行
vi /etc/kubernetes/manifests/kube-scheduler.yaml
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
#step2:重启kubelet服务
systemctl restart kubelet
#step3:再次查看组件健康状态
kubectl get cs
kubectl get nodes
此时,主节点状态NotReady,因为主节点未安装网络插件,无网络,各节点无法相互通信。
10、部署flannel网络组件(集群各节点都要做)
flannel组件连通每个Kubernetes节点
拉取镜像
# 手动拉取flannel的docker镜像,在~目录下操作即可
docker pull easzlab/flannel:v0.11.0-amd64
# 修改镜像名称,因kube-flannel.yml配置文件中使用到的镜像名是下面后者
docker tag easzlab/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
下载flannel资源配置清单
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安装flannel
[root@master ~]# kubectl apply -f kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged configured
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created
若安装不成功,需修改下kube-flannel.yml文件的镜像版本(因为kube-flannel.yml中镜像版本是12的,而flannelv0.12.0-amd64版本无法下载,所以我使用的是11的版本,需要将此处也修改为11)
flannel部署成功后
kubectl get nodes
kubectl get pods -n kube-system
[root@node01 kubernetes]# kubectl get pods -n kube-system
The connection to the server localhost:8080 was refused - did you specify the right host or port?
解决办法
#将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量
#拷贝到node01节点(主节点操作)
scp /etc/kubernetes/admin.conf node02:/etc/kubernetes/
#配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
#立即生效
source ~/.bash_profile
#再运行kubectl就不会提示错误了
11、将node节点加入集群
#以下语句可在kubeadm初始化成功的最后一段截取
kubeadm join 192.168.220.24:6443 --token rvxs2b.pun13z9vffgtvrsb --discovery-token-ca-cert-hash sha256:243aeb548771b1eb40def1a7ed714c03769eb13d0a1cfafbd2cfb4d0d10e8ccf
#token ID的获取,在主节点上操作
kubeadm token create
#sha证书摘要
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
#以下是打印结果
243aeb548771b1eb40def1a7ed714c03769eb13d0a1cfafbd2cfb4d0d10e8ccf
#查看节点信息,此时会看到node01,node02节点上ROLES的值为
kubectl get nodes
#node01,node02节点添加node角色
kubectl label node node01 node-role.kubernetes.io/node=node
kubectl label node node02 node-role.kubernetes.io/node=node
#再次核查node节点信息
kubectl get nodes