k8s自动化集群部署
Linux环境配置:
快速部署k8s集群
- centos7-1 master
- centos7-2 node1
- centos7-3 node2
k8s中Linux必须关闭以下设置:
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时关闭
setenforce 0
# 关闭swap
# 临时
swapoff -a
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 设置虚拟机ip地址不发生改变
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改如下配置
BOOTPROTO=dhcp #修改为BOOTPROTO=static
# 然后添加如下设置:
IPADDR=master主机ip地址
NETMASK=255.255.255.0
GATEWAY=192.168.10.1 #在虚拟机-编辑-虚拟网络编辑器查看,或者ifconfig查看
DNS1=192.168.10.1 #与GATEWAY一致
# 然后关机,打开虚拟机-编辑-虚拟网络编辑器-NAT设置-点击确定-重启虚拟机即可
# 根据规划设置主机名:
# master节点
hostnamectl set-hostname k8smaster
# node1节点
hostnamectl set-hostname k8snode1
# node2节点
hostnamectl set-hostname k8snode2
# 在master添加hosts:
cat >> /etc/hosts << EOF
master主机ip k8smaster
node1节点ip k8snode1
node2节点ip k8snode2
EOF
# 将桥接的IPv4流量传递到iptables的链
?为什么这样设置
同一节点的不同pod是利用linux bridge在网络上进行通讯
如果不进行设置的话,podA请求services通过iptables发送,services中的podB返回数据时发现podA与podB在同一节点会走网路的第二层进行返回。
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
sysctl --system
# 设置Linux时间与windows同步
yum install ntpdate -y
ntpdate time.windows.com
安装Docker(19.03.13)
# 配置docker的阿里yum源
cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
# yum方式下载docker
# yum安装
yum -y install docker-ce
# 查看docker版本
docker --version
# 启动docker
systemctl start docker
#开机启动docker
systemctl enable docker
# 配置docker镜像源
cat >> /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
安装kubernetes
# 添加kubernetes软件源
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=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
EOF
# 安装kubeadm,kubelet和kubectl(指定版本1.20.11)
# 安装kubelet、kubeadm、kubectl,同时指定版本
yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11
# 设置开机启动
systemctl enable kubelet
kubeadm方式搭建集群
# 部署Kubernetes Master【master节点】
kubeadm init --apiserver-advertise-address=master主机ip --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.11 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
使用kubectl工具 【master节点操作】–一个一个执行
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 get pods -n kube-system
# 将其他node节点加入master操作(在node1和node2执行下面语句)
kubeadm join master主机ip:6443 --token n4tuyk.pjlc88k3e7f12fea \
--discovery-token-ca-cert-hash sha256:60d17b6b8749b55d5c5074047ddf2219f2033ec568b1d299d16463a048c89da2
# 默认token有效期为24小时,当过期之后,该token就不可用了。需创建新的token
kubeadm token create --print-join-command
部署CNI网络插件(以下语句报错,是由于域名解析不了,无法访问)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 解决:
1.通过http://ip.tool.chinaz.com/raw.githubusercontent.com查找raw.githubusercontent.com对应的ip地址
2.在linux中执行语句
vim /etc/hosts
# 添加如下内容:
185.199.109.133 raw.githubusercontent.com
3.重新执行语句
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
解决某节点还处于NotRead状态,在master机器上将该节点删除
# master节点将该节点删除
kubectl delete node k8snode1
# 然后到k8snode1节点进行重置
kubeadm reset
# 重置完后在加入
kubeadm join master主机ip:6443 --token n4tuyk.pjlc88k3e7f12fea \
--discovery-token-ca-cert-hash sha256:60d17b6b8749b55d5c5074047ddf2219f2033ec568b1d299d16463a048c89da2
测试kubernetes集群–以Nginx服务为例
# 下载nginx镜像,以容器方式启动
kubectl create deployment nginx --image=nginx
# 查看状态
kubectl get pod
# 对外暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看一下对外的端口
kubectl get pod,svc
# 测试访问
master主机:30559
k8s可视化工具:
免费版:Dashboard
企业版:kubesphere
|