kubectl get pods 查看所有pods
kubectl get services 查看services
kubectl replace --filename=myweb-rc.yaml 根据该yaml更新pod可以修改副本数为0,删除pod
docker ps -a 查看所有docker容器
docker attach 容器名 进入容器内
kubectl describe pod pod名字 查看该pod的详细信息
http://blog.itpub.net/28916011/viewspace-2213957/
k8s
master/node
master : API Server ,Scheduler,Controller-Manager
node : kubelet,docker,kube-proxy
Pod:
自主式Pod
控制器管理的Pod
ReplicationController(RC)
ReplicaSet
Deployment
StatefulSet
DaemonSet
Job,CronJob
环境
master,etcd:172.18.0.67
node1:172.18.0.68
node2:172.18.0.69
前提;
1:基于主机名通信:/etc/hosts
2:时间同步
3:关闭firewall和iptables.service
OS:Centos7.3 1611
yum -y install ntp
systemctl start ntpd
systemctl enable ntpd
systemctl stop firewalld
systemctl disable firewalld
vim /etc/hosts
172.16.100.64 master
172.16.100.65 node1
172.16.100.66 node2
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master yum.repos.d]# cat kubernets.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
scp kubernets.repo docker-ce.repo node1:/etc/yum.repos.d
scp kubernets.repo docker-ce.repo node2:/etc/yum.repos.d
yum install docker-ce kubelet kubeadm kubectl
vim /usr/lib/systemd/system/docker.service
[service]增加
Environment="HTTPS_PROXY=http://www.ik8s.io:10080"
Environment="NO_PROXY=127.0.0.0/8,172.16.0.0/16"
systemctl daemon-reload
systemctl restart docker
systemctl status docker
docker info
确保下面两个为1
[root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
[root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
systemctl status kubelet有出错信息,需要停掉kubelet,然后设置开机启动,docker也设成开机启动,出不出错都要操作,后面初始化出错了
然后初始化
初始化的时候出错。因为swap选项
kubeadm init --help 查看帮助信息, --kubernetes-version string 指定版本,默认为当前稳定版
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
如果出错有swap,不支持。需要的操作:
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
然后重新初始化,添加忽略参数
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
妈逼的代理不成功,总下载失败,最后搜到可以这么干--image-repository registry.aliyuncs.com/google_containers 配置文件取消掉代理,重新reload,重启docker
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.13.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
安装完成结尾会有token和哈希码,一定要保存下来。不然以后就麻烦了,就是类似下面这串。
kubeadm join 172.16.100.64:6443 --token yqzclr.ztxgcumdlqzjbpl4 --discovery-token-ca-cert-hash sha256:b5119e9530e8bd01b0317e19f3ca14835ad457f3d33a5de963e7a8fa33f3a541
接下来等master安装完回到master操作
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# kubectl get cs 查询组件状态健康信息
二:部署网络插件flannel https://github.com/coreos/flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
部署完成后稍等一分钟
kubectl get nodes 可以发现master状态Ready了。
kubectl get pods -n kube-system 会发现flannel的pod
客户端node操作
yum -y install docker-ce kubelet kubeadm
master执行 拷贝配置文件到两台node上
scp /usr/lib/systemd/system/docker.service node1:/usr/lib/systemd/system/docker.service
scp /etc/sysconfig/kubelet node1:/etc/sysconfig/kubelet
客户端node操作
yum -y install docker-ce kubelet kubeadm
systemctl enable docker kubelet
systemctl daemon-reload
systemctl start docker
docker info
加入到master,就是之前复制的那一串,然后加上忽略Swap
kubeadm join 172.16.100.64:6443 --token yqzclr.ztxgcumdlqzjbpl4 --discovery-token-ca-cert-hash sha256:b5119e9530e8bd01b0317e19f3ca14835ad457f3d33a5de963e7a8fa33f3a541 --ignore-preflight-errors=Swap
以上安装全部完成
安装配置
1:etcd cluster 仅master节点
2:flannel 集群的所有节点
3:配置k8s的master 仅master节点
kubernets-master
启动的服务:
kube-apiserver kube-scheduler kube-controller-manager
4:配置k8s的各Node节点
kubernets-node
先设定启动docker服务
启动k8s的服务:
kube-proxy,kubelte
kubeadm
1:master,node:安装kubelet kubeadm docker
2:master:kubeadm init
day2 http://blog.itpub.net/28916011/viewspace-2213957/
k8s相关介绍 资源:对象 workload:Pod,ReplicaSet,Deployment,StatefulSet,Job,Cronjob... 服务发现及均衡:Service,Ingress... 配置与存储:Volume,CSI, ConfigMap,Secret 集群级资源: NameSpace,Node,Role,ClusterRole,RoleBind,ClusterRoleBind 元数据型资源 HPA,PodTemplate,LimitRange, 创建资源的配置清单 apiVersion: group/version $ kubectl api-version kind:资源类别 metadata:元数据 name namespace labels annotations 每个资源的引用PATH /api/GROUP/VERSION/namespace/NAMESPACE/TYPE/NAME spec: 期望状态 disired state status:当前状态 current state,本字段由k8s集群维护 Pod 资源 spec.containers <[]object> - name <string> image <string> //如果是latest标签,就会一直下载,但是下面如果改成ifnotpresent 那就不会一直下不会使用默认的aways imagePullPolicy <string> Always,Never,IfNotPresent //always总是下载,Never不下载,ifnotpresent 如果不存在就下载 标签操作 查询某个pod,node标签, [root@master k8syaml]# kubectl get pods pod-demo --show-labels 查询app标签的pod kubectl get pods -l app --show-labels 添加标签为某个pod kubectl label pods pod-demo relase=beata 修改某个标签的值 kubectl label pods pod-demo relase=stable --overwrite 标签选择器 等值关系:=,==,!= 集合关系:key in (value1,value2);key notin (value1,value2) 查询relase等于stable,并且app=myapp标签的pod [root@master k8syaml]# kubectl get pods -l relase=stable,app=myapp 基于集合的查询,relase如果等于stable或者beta的pod [root@master k8syaml]# kubectl get pods -l "relase in (stable,beta)" 基于节点的 [root@master k8syaml]# kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS master Ready master 2d22h v1.13.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=master,node-role.kubernetes.io/master= node1 Ready <none> 2d20h v1.13.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node1 node2 Ready <none> 2d20h v1.13.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node2 [root@master k8syaml]# kubectl label nodes node1 disktype=ssd node/node1 labeled [root@master k8syaml]# kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS master Ready master 2d22h v1.13.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=master,node-role.kubernetes.io/master= node1 Ready <none> 2d20h v1.13.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/hostname=node1 node2 Ready <none> 2d20h v1.13.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node2 nodeSelector: 指定pod运行在标签哪个节点,下面是运行在标签为disktype: ssd的nod上 [root@master k8syaml]# cat demo.yaml apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp tier: forntend spec: containers: - name: myapp image: ikubernetes/myapp:v1 - name: busybox image: busybox:latest command: - "/bin/sh" - "-c" - "sleep 3600" nodeSelector: disktype: ssd nodeName:运行在指定的节点上 annotations:与label不同的地方在于,它不能用于挑选资源对象,仅用于为对象提供“元数据” [root@master k8syaml]# vim demo.yaml apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp tier: forntend annotations: lihongxing.com/created-by: cluster admin spec: containers: - name: myapp image: ikubernetes/myapp:v1 - name: busybox image: busybox:latest command: - "/bin/sh" - "-c" - "sleep 3600" nodeSelector: disktype: ssd 以上会添加lihongxing.com/created-by: cluster admin的annotations资源注解,用describe可以查看到 [root@master k8syaml]# kubectl describe pods pod-demo Pod生命周期:http://blog.itpub.net/28916011/viewspace-2213957/ 状态:Pending/Running/Failed/Succeeded/Unknown Pod生命周期的重要行为: 初始化容器 容器探测: liveness 存活性探针 readiness 就绪性探针 restartpolicy 重启策略: Always,OnFailure,Never,Default to Always 探针类型三种: ExecAction,TcpSocketAction,HttpGetAction [root@master k8syaml]# vim liveness.yaml apiVersion: v1 kind: Pod metadata: name: liveness-exec.pod namespace: default spec: containers: - name: liveness-exec-container image: busybox:latest imagePullPolicy: IfNotPresent command: ["/bin/sh","-c","toch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 3600"] livenessProbe: exec: command: ["test","-e","/tmp/healthy"] initialDelaySeconds: 1 periodSeconds: 3