k8s kubernetes 核心笔记 镜像仓库 项目k8s改造

2019/10/24 Chenxin

一 基本资料

一 参考:

https://kubernetes.io/ 官网

https://kubernetes.io/docs/home/ 官网文档

<<kerbernetes 权威指南>> <<每天5分钟玩转k8s>> 图书

aws 和 阿里云 的k8s 集群,请参考对应云知识笔记内容.

二 说明:

docker内容请参考<<Docker 基础>>,<Dockerfile 以及 Docker compose>> 笔记

k8s yaml 配置文件请参考对应单独笔记内容.

k8s 文件说明请参考对应独立笔记内容.

二 k8s常用指令

kubectl get all    # 查看所有
kubectl get all --all-namespaces
kubectl get pods|deployments.|replicasets.|service -o wide
kubectl get nodes --show-labels # 查看node标签 kubectl describe pods|deployments.|replicasets.|service xxx_name
kubectl apply -f xxx.yml kubectl delete pods|deployments.|replicasets.|service xxx_name
kubectl delete -f xxx.yml kubectl edit daemonsets. kube-proxy --namespace=kube-system # 编辑内存里配置文件.应该是及时修改后生效,但测试并未生效
kubectl edit service nginx-svc kubectl logs pod_name # 查看pod内进程输出 (查看最后200行 kubectl logs --tail=200 pod_name 或最后1小时 --since=1h )
kubectl api-versions # 查看k8s当前支持的api版本
kubectl run busybox --rm -it --image=busybox /bin/sh # 临时启用一个工具箱
kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword # 临时启动一个mysql客户端
kubectl apply -f httpd.v1.yml --record # 登记到revision,用于回滚
kubectl rollout history deployment httpd # 查看历史记录,为回滚做准备
kubectl rollout undo deployment httpd --to-revision=1 # 回滚到版本1
kubectl exec mypod-id touch /mydata/hello # 到Pod的container里执行指令
kubectl exec mypod-id df | grep data # 到Pod里执行指令
kubectl create configmap game-config --from-file=docs/gameconfig/ # 目录内含有多个配置文件(每个配置文件里可以有很多内容)
journalctl -l -u kubelet # 查看kubelet日志 kubectl get pods -o yaml # 配置yaml格式详情
kubectl get endpoints # 查看终端服务节点 故障排查主要使用
kubectl logs pod_name # 查看控制台输出(pod运行的报错信息)
kubectl describe pods|deployments.|replicasets.|service xxx_name kubectl top node node1 --v=8 #开启debug模式输出.使用top指令查看资源情况,需部署heapster(1.8之前版本默认提供.之后修改为service-metric).参考https://github.com/helm/charts/tree/master/stable/heapster

自动命令补全额外说明

具体请参考本文档"master命令自动补全"部分.如果失效,需要手动再次 source <(kubectl completion bash )

三 架构+安装服务(master+node)

架构说明

1个master,2个node(192.168为二次实验地址)

k8s-master 10.0.0.105 192.168.143.130

k8s-node1 10.0.0.106 192.168.143.131

k8s-node2 10.0.0.107 192.168.143.132

版本说明

首次测试为k8s的1.13版本,第二次测试为1.16.1版本

操作系统版本说明

k8s只支持centos7.x以上版本.

这里采用系统版本为:

AWS Marketplace的CentOS官方镜像而来(更新时间: 19/1/31) 默认为7.6版本(2018/10).

修改/etc/hostname

更新系统

yum update -y # 更新到最新系统版本

更新iptables(略过)

RHEL7.4无需更新iptables,因为iptables -V -> iptables v1.4.21

配置网络桥接与路由转发

/etc/sysctl.conf 文件增加

net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

安装/启动docker

a.配置yum仓库

b.正式安装

yum install -y docker-ce

docker --version -> Docker version 18.09.2 (首次版本,第二次为Docker version 19.03.3, build a872fc2f86)

c.启动docker

systemctl start docker.service

systemctl enable docker.service

报错解决

Error: Package: 3:docker-ce-18.09.2-3.el7.x86_64 (docker-ce-stable) Requires: container-selinux >= 2.9

到centos官网寻找最新的container-selinux,然后安装,如下

yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.74-1.el7.noarch.rpm

安装k8s的kubeadm, kubelet 和 kubectl

参考: https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/

  • 国内-阿里云
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  • 国外-配置google的源地址(也可以采用国内阿里云,中科大镜像)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

将 SELinux 设置为 permissive 模式(镜像默认已经将其禁用)

setenforce 0

sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

master+node安装

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # 会自动安装conntrack-tools cri-tools ebtables socat等依赖包

添加开机自启

systemctl enable docker.service # master+node都需要.

systemctl enable kubelet.service # master+node都需要.mster:先启动kubelet,通过它自启apiserver,controller-manager,scheduler.node:先kubelet后,自动通过kubelet启kube-proxy

到此可以重启一下系统.

四 创建集群

master初始化集群

1.绑定host

[root@master ~]# cat /etc/hostname
master
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.143.130 master
[root@master ~]# hostname
master

2.确保master上的docker已启动

ps axf|grep dockerd

3.(选做)可以将系统镜像里默认开启的rpc暂时关掉,并开机不启动

systemctl stop rpcbind.service rpcbind.socket

systemctl disable rpcbind.service rpcbind.socket

4.master上进行init

[root@ip-10-0-0-105 ~]#
普通执行 kubeadm init --apiserver-advertise-address 10.0.0.105 --pod-network-cidr=10.244.0.0/16
或更改网络段 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16
或指定k8s版本 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --kubernetes-version=v1.16.1
或指定拉取国内镜像 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --kubernetes-version=v1.16.1 --image-repository=registry.aliyuncs.com/google_containers 失败后的重新初始化(先复位 kubeadm reset)
尝试1.kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
尝试2.kubeadm init --apiserver-advertise-address 0.0.0.0 --pod-network-cidr=10.10.0.0/16 --image-repository=registry.aliyuncs.com/google_containers 提示信息如下(正常执行状态)
[preflight] Running pre-flight checks # kubeadm执行初始化前的检查
[certs] Using certificateDir folder "/etc/kubernetes/pki" # 生成token和证书
[kubeconfig] Using kubeconfig folder "/etc/kubernetes" # 生成kubeconfig文件,kubelet需要这个文件与master通信
[apiclient] All control plane components are healthy after 21.506225 seconds # 安装master组件,会从Google的Registry下载组件的Docker镜像.
[addons] Applied essential addon: CoreDNS # 安装附加组件 kube-proxy和 kube-dns
Your Kubernetes master has initialized successfully! # Kubernetes Master初始化成功 To start using your cluster, you need to run the following as a regular user: # 提示如何配置kubectl
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. # 提示如何安装Pod网络
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: # 提示注册其他的node节点到这个cluster
kubeadm join 10.0.0.105:6443 --token xj0xjp.d6r8fzuecc1ve0bu --discovery-token-ca-cert-hash sha256:cd505e2d2494e429cac81e50942c7c3d4eda50908fddccdb667aefccf0543517

kubeadm join 192.168.143.130:6443 --token cgy56z.02yki9avqnukpxtg \
--discovery-token-ca-cert-hash sha256:152fd4be14843846e48c6752b1bd003bf7fb5e56e22085b31002f6babd58a66f

init报错收集(解决办法)

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[ERROR Swap]: running with swap on is not supported. Please disable swap

a.需要关闭swap,"swapoff -a".

b.echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables (桥接模式/etc/sysctl.conf里net.bridge.bridge-nf-call-iptables = 1 ;如果系统无bridge-nf-call-iptables文件,则"modprobe br_netfilter"向内核中加载该模块).

c.国内访问,会自动docker pull k8s.gcr.io/xxx 需要翻墙(也可以通过从国内pull后打tag的方式变相处理,具体请百度搜索).

5.执行init失败后采取的恢复方法

a.init执行失败,重新执行init的时候,需要添加 --ignore-preflight-errors=all ,这样会生成多个cluster(后期再删除)

b.执行 kubeadm reset 命令将主机恢复原状(注意,会将下载完的多个docker image也一并删除),然后重新执行 kubeadm init 命令再次进行init安装.

master配置kubectl

根据init初始化中的提示(root执行会有一些问题)这里创建一个centos用户来执行.

useradd centos

visudo里添加 centos ALL=(ALL) NOPASSWD: ALL # 涉及拷贝root权限的文件

拷贝配置文件

su - centos;

cd ~; mkdir .kube; sudo cp -i /etc/kubernetes/admin.conf .kube/config; sudo chown $(id -u)

k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)的更多相关文章

  1. k8s创建harbor私有镜像仓库

    1. 部署准备 准备harbor软件包 在部署节点上: mv harbor-offline-installer-v1.4.0.tgz /opt/ && cd /opt tar zxvf ...

  2. Kubernetes 配置私有镜像仓库时,没有权限访问的问题

    使用 K8S 部署服务时,如果指定的镜像地址是内部镜像仓库,那么在下载镜像的时候可能会报权限错误.这是由于在 K8S 中部署服务时,K8S 需要到 Harbor 中进行一次验证,这个验证与节点中使用 ...

  3. 二进制搭建Kubernetes集群(最新v1.16.0版本)

    目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...

  4. K8S(Kubernetes)学习笔记

    Kubernetes(k8s)是google提供的开源的容器集群管理系统,在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理 ...

  5. Kubernetes从私有镜像仓库中拉取镜像

    当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示:requested access to the resource is denied Error response from daemon: pu ...

  6. 【Kubernetes学习笔记】-使用Minikube快速部署K8S单机学习环境

    介绍 https://minikube.sigs.k8s.io/docs/ Minikube 用于快速在本地搭建 Kubernetes 单节点集群环境,它对硬件资源没有太高的要求,方便开发人员学习试用 ...

  7. 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)

    前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...

  8. Centos7安装Kubernetes k8s v1.16.0 国内环境

    一. 为什么是k8s v1.16.0? 最新版的v1.16.2试过了,一直无法安装完成,安装到kubeadm init那一步执行后,报了很多错,如:node xxx not found等.centos ...

  9. 知乎十万级容器规模的Java分布式镜像仓库实践

    作者:知乎令孤无忌 前言 知乎在 2016 年已经完成了全量业务的容器化,并在自研容器平台上以原生镜像的方式部署和运行,并在后续陆续实施了 CI.Cron.Kafka.HAProxy.HBase.Tw ...

随机推荐

  1. SpringCloud之Spring Cloud Stream:消息驱动

    Spring Cloud Stream 是一个构建消息驱动微服务的框架,该框架在Spring Boot的基础上整合了Spring Integrationg来连接消息代理中间件(RabbitMQ, Ka ...

  2. 【转载】ssh-copy-id三步实现SSH无密码登录和ssh常用命令

      ssh-keygen  产生公钥与私钥对 ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./s ...

  3. MTDDL 美团分布式数据访问中间件(转)

    MTDDL 美团分布式数据访问中间件(转) 原文地址:MTDDL--美团点评分布式数据访问层中间件 因原文文字和图显示有问题,故整理于此,仅供参考. 业界方案 组件 简介 Atlas Qihoo 36 ...

  4. How to: Map a Persistent Class to a Database View Which Has No Key Field如何:映射持久化类到无主键数据库视图

    With XAF, you can build new applications from scratch or maintain existing databases. The How to: Ge ...

  5. 6.Ansible Roles角色实战

    ==Roles小技巧:== 1.创建roles目录结构,手动或使用ansible-galaxy init test roles 2.编写roles的功能,也就是tasks. nginx rsyncd ...

  6. 过滤器(Filter)对登陆页面进行过滤验证

    import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServl ...

  7. JavaScript 基于offsetHeight和clientHeight判断是否出现滚动条

    基于offsetHeight和clientHeight判断是否出现滚动条   by:授客 QQ:1033553122 HTMLEelement.offsetHeight简介 HTMLElement.o ...

  8. vue解惑之v-on(事件监听指令)

    一.v-on指令 vue中用v-on指令来监听DOM事件,并触发相应的代码.比如v-on:click,表示监听了点击事件. 二.事件修饰符 在事件处理函数中调用 event.preventDefaul ...

  9. ESPCMS P8 stable version Front-end reflective xss

    Download the source code first In the directory espcms_web\espcms_load.php line 67 if (!is_file($mod ...

  10. kotlin之变量与常量

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/217 kotlin之变量与常量 最近开始做新产品,于是乎用 ...