发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967
课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。
腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518
第二个视频发布 https://edu.csdn.net/course/detail/27109
腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518
介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。
第三个视频发布:https://edu.csdn.net/course/detail/27574
详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------
package com.java;
import java.util.Random;
import java.util.concurrent.LinkedBlockingDeque;
public class SecretWorkFetch {
private static class Work implements Runnable{
private static Object object=new Object();
private static int count=0;
public final int id;
private long putThread;
public Work(){
synchronized(object){
id=count++;
}
}
@Override
public void run() {
if(Thread.currentThread().getId()!=putThread){
System.out.println("===================================================");
}
System.out.println(Thread.currentThread().getId()+":"+putThread+"// finish job "+id);
}
public long getPutThread() {
return putThread;
}
public void setPutThread(long putThread) {
this.putThread = putThread;
}
}
public static Work generateWork(){
return new Work();
}
private static class ConsumerAndProducer implements Runnable{
private Random random=new Random();
private final LinkedBlockingDeque<Work> deque;
private final LinkedBlockingDeque<Work> otherWork;
public ConsumerAndProducer(LinkedBlockingDeque<Work> deque,LinkedBlockingDeque<Work> otherWork){
this.deque=deque;
this.otherWork=otherWork;
}
@Override
public void run() {
while(!Thread.interrupted()){
try {
Thread.sleep(200);
if(random.nextBoolean()){
int count=random.nextInt(5);
for(int i=0;i<count;i++){
Work w=generateWork();
w.setPutThread(Thread.currentThread().getId());
deque.putLast(w);
}
}
if(deque.isEmpty()){
if(!otherWork.isEmpty()){
otherWork.takeLast().run();;
}
}else{
deque.takeFirst().run();
}
} catch (InterruptedException e) {
}
}
}
}
public static void main(String[] args) {
LinkedBlockingDeque<Work> deque=new LinkedBlockingDeque<Work>();
LinkedBlockingDeque<Work> other=new LinkedBlockingDeque<Work>();
new Thread(new ConsumerAndProducer(deque,other)).start();
new Thread(new ConsumerAndProducer(deque,other)).start();
new Thread(new ConsumerAndProducer(other,deque)).start();
new Thread(new ConsumerAndProducer(other,deque)).start();
}
}