Kubernetes-Kubeadm部署集群
1、组件
1)master组件
apiserver: 集群统一入口,以restful方式,交给etcd存储
scheduler:节点调度,选择node节点应用部署
controller-manager:处理集群中常规后台任务,一个资源对应一个控制器
etcd:存储系统, 用于保存集群相关的数据
2)node组件
kubelet:master派到node节点代表,管理本机容器
kube-proxy:提供网络代理,负载均衡等操作
2、核心概念
1)、Pod
* 最小部署单元
* 一组容器的集合
* 共享网络
* 生命周期是短暂的
2)、controller
* 确保预期的pod副本数量
* 无状态应用部署
* 有状态应用部署
* 确保所有的node运行同一个pod
* 一次性任务和定时任务
3)、service
* 定义一组pod的访问规则
3、集群部署规划
1)、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2)、关闭selinux
setenforce 0
sed -ri '/^SELINUX=/cSELINUX=disabled/' /etc/selinux/config
3)、关闭swap
swapoff -a #临时
sed -ri 's/.swap./#&/' /etc/fstab #永久
4)、规划主机名
5)、在master中添加hosts主机信息
6)、将桥接的IPV4流量传递到iptables的链
cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system 生效
7)、时间同步
ntpdate ntp.aliyun.com
4、安装docker、kubeadm,kubelet,kubectl
Docker:
yum -y install docker
cat /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://kzttrsz7.mirror.aliyuncs.com"]
}
EOF
Kubernetes:
vim /etc/yum.repos.d/kubernets.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=0
yum clean all
yum makecache
yum -y install kubelet kubeadm kubectl
systemctl enable kubelet
5、Master节点部署Kubernetes
1)、先进行初始化
$ kubeadm init \
--apiserver-advertise-address=10.0.0.101 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.4 \
--service-cidr=172.15.0.0/16 \
--pod-network-cidr=172.16.0.0/24
2)、根据提示信息进行操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
6、部署CNI网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
或者将文件下载到本地 -f kube-flannel.yml
kubectl get pods -n kube-system
文件下载:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
7、node节点加入Kubertes集群
node节点都需要加入
向集群添加新节点,执行kubeadm init输出的kubeadm join命令:
kubeadm join 10.0.0.1:6443 --token ukgzfa.m8m191o7hlsv0owt \
--discovery-token-ca-cert-hash sha256:b370b4e8a784ad6cd04ed70bda0087dafe847e2225dc84f4f0b0ec9438681dcf
默认token有效期为24小时,过期之后,该token不可用,就需要重新创建token
kubeadm token create --print-join-command
8、测试集群
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
基础命令
kubectl语法格式:
kubectl [command] [TYPE] [NAME] [flages]
kubectl create deployment nginx --image=nginx #创建nginx容器
kubectl expose deployment nginx --port=80 --type=NodePort #暴露nginx的端口
kubectl get pod,svc #查看所有的容器
kubectl apply -f *.yaml #通过yaml文件创建Pod
Yaml文件编排
方法一:
使用 kubectl create 命令生成yaml文件
kubectl create deployment web --image=nginx -o yaml --dry-run > nginx1.yaml
方法二:
使用 kubectl get 命令导出yaml文件,新版中--export已经去除
kubectl get deploy nginx -o yaml --export > nginx2.yaml
kubectl get deploy nginx -o yaml > nginx2.yaml