文章目录
k8s装机方式
目前生产部署Kubernetes 集群主要有两种方式:
kubeadm
Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群,学习的方式推荐此方式。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二进制包
从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。
Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。
这里主要是学习方式Kubeadm 装机,如果你是运维则建议学习完成后再多尝试二进制方式安装。
机器配置和安装的组件
机器 | IP | 配置 | 安装组件 |
---|---|---|---|
master | 172.16.12.200 | 2CPU,2G内存,50G磁盘 | docker18.06.3,kubectl1.17.4,kubeadm1.17.4,kubelet1.17.4 |
node1 | 172.16.12.201 | 2CPU,2G内存,50G磁盘 | docker18.06.3,kubectl1.17.4,kubeadm1.17.4,kubelet1.17.4 |
node2 | 172.16.12.202 | 2CPU,2G内存,50G磁盘 | docker18.06.3,kubectl1.17.4,kubeadm1.17.4,kubelet1.17.4 |
虚拟机安装
基础安装参考 centos系统虚拟机安装和服务配置初始化装机部分
K8S环境基础配置
DNS配置
#机器名称
hostnamectl set-hostname k8s-master
echo '
172.16.12.200 k8s-master
172.16.12.201 k8s-node1
172.16.12.202 k8s-node2' >> /etc/hosts
关闭防火墙 交换区 持久化关闭
systemctl stop firewalld && systemctl disable firewalld
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
cat /etc/selinux/config
# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux
# sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config
#安装yum管理工具
yum -y install yum-utils wget curl
#时间同步
systemctl start chronyd
systemctl enable chronyd
date
修改k8s.conf文件
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
加载网桥过滤模块
modprobe br_netfilter
#查看网桥过滤是否加载成功
lsmod | grep br_netfilter
基础环境安装完成并复制出node节点
把mastet机创建快照,使用该快照克隆node虚拟机
0.master关机
1.master右键-快照-创建快照
2.master右键-管理-克隆-从现有快照创建虚拟机-创建完整克隆
3.创建两个node节点虚拟机,启动设置网络IP和机器名称
vi /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=172.16.12.201 #修改IP
保存修改并使用以下命令来重启网络服务:
#修改机器名称
hostnamectl set-hostname k8s-node1
systemctl restart network.service
mastter初始化
apiserver-advertise-address要设置为master的IP地址
kubeadm init \
--apiserver-advertise-address=172.16.12.200 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=$(kubeadm version -o short)\
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
执行完成,打印结果如下:
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 172.16.12.200:6443 --token zp2pop.ufd1k1hzpx1ihqz2 \
--discovery-token-ca-cert-hash sha256:63c048a573e5e0d3dd78e34c1bf93e5983ec714588f5bb2299524aa2e816d82f
按照打印的要求执行命令
# 创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
node节点加入
在node节点执行
kubeadm join 172.16.12.200:6443 --token zp2pop.ufd1k1hzpx1ihqz2 \
--discovery-token-ca-cert-hash sha256:63c048a573e5e0d3dd78e34c1bf93e5983ec714588f5bb2299524aa2e816d82f
master上所有的节点信息
可是此时node的信息是NotReady,那是因为我们还没有设置网络插件(flannel,weave)
kubectl get nodes
flannel安装到master节点
#安装网络插件
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 验证是否安装成功,变更为ready状态
sudo kubectl get ds -n kube-system
验证是否安装成功,变更为ready状态
sudo kubectl get ds -n kube-system
集群测试
创建一个nginx服务看看能否成功,并且能够访问到这个服务
## 创建一个nginx服务
kubectl create deployment nginx --image=nginx:1.14-alpine
## 暴露端口
kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
## 查看服务
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 10d
nginx NodePort 10.1.120.81 <none> 80:32675/TCP 10d
主机访问http://localhost:32675能看到nginx页面即为成功
以下部分为异常过程中需要处理的时候使用,正常情况下没有问题可以直接跳过。
使用kubeadm reset重置集群node节点方便重新初始化
如果你在master初始化之后出现了异常,或者其他无非恢复的异常操作,那么只需要重置master,然后重新开始master和node初始化即可
在master节点之外的节点进行操作
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
重启kubelet
systemctl restart kubelet
重启docker
systemctl restart docker
token过期重新获取
1.先获取token
kubeadm token list
#如果过期可先执行此命令
kubeadm token create --print-join-command #重新生成token
#列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1
2.获取CA公钥的哈希值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
详细笔记
https://gitee.com/purslane/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B/Kubernetes%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md