Hello World!
Toggle navigation
Home
开发
运维部署
旧博客搬家
About Me
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Archives
Tags
K8s
2019-11-07 07:22:24
35
0
0
lion
# 安装 # 安装kubectl curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl #验证 kubectl version # docker ubuntu下使用apt install docker.io(不要使用snap install docker) # 安装minikube curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube sudo mkdir -p /usr/local/bin/ sudo install minikube /usr/local/bin/ # http代理 设置环境变量 HTTP_PROXY=http://172.17.1.1:808 minikube start --docker-env=HTTP_PROXY=$HTTP_PROXY --docker-env HTTPS_PROXY=$HTTPS_PROXY --docker-env NO_PROXY=$NO_PROXY # 启动 minikube start --vm-driver=none # 部署服务(创建) kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10 # 暴露服务(运行起来) kubectl expose deployment hello-minikube --type=NodePort --port=8080 # 查看pod kubectl get pod # 查看服务地址: minikube service hello-minikube --url # 删除服务 kubectl delete services hello-minikube # 控制台 minikube dashboard 运行一次退出(启用dashboard即可) 然后 kubectl proxy --address='0.0.0.0' --accept-hosts='*' 然后,dashboard地址为: http://IP:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ # 集群安装 ## 安装docker ## 安装组件 #设代理 https_proxy=http://172.18.21.26:808 export https_proxy http_proxy=http://172.18.21.26:808 export http_proxy #安装包源 sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl ## 初始化集群 kubeadm init <args> 参数: --control-plane-endpoint=cluster-endpoint #控制节点地址,可用dns和ip,建议dns,方便后续指向负载均衡,实现控制节点高可用。 ## 启动集群 ### 使用非root启动 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ### 使用root用户 export KUBECONFIG=/etc/kubernetes/admin.conf ### 部署网络插件 kubectl apply -f [podnetwork].yaml [podnetwork]为网络模式名称,说明在此:https://kubernetes.io/docs/concepts/cluster-administration/addons/ ### 加入工作节点 kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash> #### token过期重新创建 #查看token kubeadm token list #创建新token kubeadm token create --print-join-command # 概念 ## 集群工具 kubeadm 工具,用来安装和启用master节点,以及将node节点加入master kubectl 工具,用于常规操作命令,例如部署deployment,查看pod等,通过连接到api-server远程执行命令来操作集群。 ### 集群安装 1、先安装kubeadm工具 2、使用kubeadm init命令创建和启动master节点,回显信息中,会包含加入该集群所需的命令、token等信息 kubeadm init --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16 然后按提示执行一些复制命令,用于配置kubectl工具。 3、使用kubeadm join 将node节点加入集群 4、安装flannel wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.ymml ## Deployment/Pod/Service Deployment包含1-N个ReplicaSet(副本控制器) ReplicaSet会创建N个内容相同的Pod,N为设定的副本数。 Pod包含1-N个容器,内部共享网络和存储。 Service会产生集群DNS和ClusterIP,映射到一组Pod,具体Service包含哪些Pod由Labels确定。 HeadLess Service会产生集群DNS,但不会有ClusterIP,其集群DNS直接解析为多个Pod的ip,用于对等集群直接访问,如kafka集群。 ### Pod #### 优先级 Pod对资源的使用优先级,分为 guaranteed/burstable/best-effort(保证/突发/尽力) 三种模式由 request和limit参数共同设定 。不设置时默认为best-effort模式,尽力按需分配。 设置limit>request时,为burstable模式,request指定最小资源数。 设定limit=request时,即资源恒定分配,为guaranteed模式。 ## DaemonSet 一种副本控制器,类似ReplicaSet,区别是会固定在每个物理节点上运行一个Pod副本,不需设定副本数。 ## statefulSet 与replicaSet相比,有以下特性: 1、每个pod有序号,按序重启等操作。例如更新镜像时,按序号从大到小依次更新重启。 2、存储由pvc提供持久化,pod调度重启后,之前pod名称、hostname、存储仍保留。 3、必需是headless service ## 网络 1、pod内部容器共享pause容器网络,可直接互通 2、pod间通讯,由cni插件提供,默认由flannel提供。 3、flannel需要采用vxlan或host-gw模式,其中vxlan可跨二层网络,而host-gw要求pod所在物理节点在同一二层网络 3、vxlan启用direct-routing,可提升同一网段内的转发速度。 4、k8s service 通过kube-proxy对外提供服务,k8s集群内可使用clusterip或dns互访,k8s以外通过NodePort映射,类似DNAT的端口映射。 5、应启用kube-proxy的ipvs模式,提高性能。 ## 存储 1、emptyDir 类似 docker volume 2、hostPath 类似 docker 宿主机目录挂载 3、PV/PVC 远程资源挂载,支持NFS、ISCSI等设备 ## ConfigMap/Secret 1、将配置文件通过key-value存储到etcd中,key为配置文件名,value为配置文件内容。 2、通过挂载ConfigMap或Secret类型的volume来使用,将配置文件mount到pod内部。 3、Secret跟ConfigMap基本一样,区别是Secret的配置文件内容,通过base64编码,提供弱安全性。 ## 健康检查 3种probe探针:ExecAction/SocketAction/HttpGetAction 两种检测:liveness和readiness(存活检测探针和就绪检测探针) ## 报警 ## 降级、熔断 ## RBAC权限控制 通过对api server入口进行权限控制,来控制对整个集群的操作。 RBAC插件对应两种对象,同样使用yaml来创建: Role:作用于namespace,通过yaml创建RoleBinding对象来绑定到User/Group/Service Account ClusterRole:作用于全局,通过yaml创建ClusterRoleBinding对象来绑定到User/Group/Service Account ## helm包管理 user account : 外部帐号,用于操作员,作用于全局. service account :服务账号,用于pod中访问kubenetes api,作用于namespace,附带secret凭据。 每个namespace都会有一个默认的service account
Pre:
windbg分析.net内存泄漏
Next:
Scrapy爬虫开发
0
likes
35
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
目录