Kubernetes(一)
2020-02-25 本文已影响0人
吃可爱长大鸭
简介 k8s系统架构
从系统架构来看,k8s分为2个节点
Master 控制节点 指挥官
Node 工作节点 干活的
1.Master节点组成
API Server :提供k8s API接口
主要处理Rest操作以及更新Etcd中的对象
是所有资源增删改查的唯一入口。
Scheduler:资源调度器
根据etcd里的节点资源状态决定将Pod绑定到哪个Node上
Controller Manager
负责保障pod的健康存在
资源对象的自动化控制中心,Kubernetes集群有很多控制器。
Etcd
这个是Kubernetes集群的数据库
所有持久化的状态信息存储在Etcd中
2.Node节点的组成
Docker Engine
负责节点容器的管理工作,最终创建出来的是一个Docker容器。
kubelet
安装在Node上的代理服务,用来管理Pods以及容器/镜像/Volume等,实现对集群对节点的管理。
kube-proxy
安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。
第2章 k8s逻辑架构
从逻辑架构上看,k8s分为
Pod
Controller
Service
1.POD
POD是k8s的最小单位
POD的IP地址是随机的,删除POD会改变IP
POD都有一个根容器
一个POD内可以由一个或多个容器组成
一个POD内的容器共享根容器的网络命名空间
一个POD的内的网络地址由根容器提供
2.Controller
用来管理POD
控制器的种类有很多
- RC Replication Controller 控制POD有多个副本
- RS ReplicaSet RC控制的升级版
- Deployment 推荐使用,功能更强大,包含了RS控制器
- DaemonSet 保证所有的Node上有且只有一个Pod在运行
- StatefulSet 有状态的应用,为Pod提供唯一的标识,它可以保证部署和scale的顺序
3.Service
NodeIP
CluterIP
POD IP
第一章 k8s实验环境准备:
配置信息:
主机名 | IP地址 | 推荐配置 | 勉强配置 |
---|---|---|---|
master | 10.0.0.11 | 1C4G40G | 1C2G |
node1 | 10.0.0.12 | 1C2G40G | 1C1G |
node2 | 10.0.0.13 | 1C2G40G | 1C1G |
初始化操作:
干净环境
关闭防火墙
关闭SELinux
配置时间同步
配置主机名
配置host解析
更新好阿里源
确保网络通畅
第二章 安装部署docker
1.安装docker yum源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
2.安装指定的docker版本
yum -y install docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.7
3.设置docker使用阿里云加速
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"]
}
EOF
4.启动后台进程
systemctl start docker && systemctl enable docker
5.查看docker版本
docker -v
第三章 部署kubeadm和kubelet
注意!所有机器都需要操作!!!
注意!所有机器都需要操作!!!
注意!所有机器都需要操作!!!
1.添加k8s YUM源
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
2.安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 ipvsadm
3.设置k8s禁止使用swap
cat > /etc/sysconfig/kubelet<<EOF
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF
4.设置内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
5.设置kubelet开机启动
systemctl enable kubelet && systemctl start kubelet
第四章 初始化集群部署Master
1.初始化
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.16.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
2.为kubectl准备kubeconfig
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行完成后会有输出,这是node节点加入k8s集群的命令
===============================================
kubeadm join 10.0.0.11:6443 --token 2an0sn.kykpta54fw6uftgq \
--discovery-token-ca-cert-hash sha256:80cf180e844f6a7b6ae3bd3ba994d7727db1e78d25220344c57b7bb667b70f9e
===============================================
4.支持命令补全
yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
kubectl completion bash >/etc/bash_completion.d/kubectl
第五章 部署网络插件
# master操作
1.部署Flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 检查flannel进程
ps -ef|grep flannel
2.检查pod运行状态,等一会应该全是running
[root@node1 ~]# kubectl -n kube-system get pod
NAME READY STATUS RESTARTS AGE
coredns-58cc8c89f4-bzlkw 1/1 Running 0 77m
coredns-58cc8c89f4-sgs44 1/1 Running 0 77m
etcd-node1 1/1 Running 0 76m
kube-apiserver-node1 1/1 Running 0 76m
kube-controller-manager-node1 1/1 Running 0 76m
kube-flannel-ds-amd64-cc5g6 1/1 Running 0 3m10s
kube-proxy-7cdbn 1/1 Running 0 23m
kube-scheduler-node1 1/1 Running 0 76m
涉及到的命令
ipvsadm -Ln #查看ipvs规则
kubectl get pod #查看pod信息
kubectl get pod -o wide #查看pod的详细信息 ip labels
kubectl get pod -n kube-system -o wide #指定查看某个命名空间的pod的详细信息
kubectl get nodes #查看节点信息
kubectl get nodes -o wide #查看节点详细信息
kubectl -n kube-system edit cm kube-proxy #编辑某个资源的配置文件
kubectl -n kube-system logs -f kube-proxy-7cdbn #查看指定命名空间里的指定pod的日志
kubectl create -f kube-flannel.yml #根据资源配置清单创建相应的资源
kubectl delete -f kube-flannel.yml #删除资源配置清单相应的资源
kubeadm reset #重置kubeadm节点
# 命令行运行pod资源
kubectl run nginx --image=nginx:1.16-alpine --port=80
# 查看deployment列表
kubectl get deployment
# 打通svc
kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
kubectl expose deployment nginx-deploy --name=nginx
# 升级
kubectl set image deployment nginx-deploy nginx=nginx:1.17.0
#回滚
kubectl rollout undo deployment nginx-deploy
# 修改副本数
kubectl scale --replicas=2 deployment nginx-deploy
#修改资源
kubectl edit svc nginx
# 查看pod详细信息
kubectl describe pods nginx-deploy-6bb866c9b9-jlzsk
# 查看deployment 详细信息
kubectl describe deployments.apps nginx-deploy
# 删除pod
kubectl delete po nginx-deployment
# 删除deployment
kubectl delete deployment nginx